Ingerencja w kod HTML strony
Moderator: Pomocy?!
Ingerencja w kod HTML strony
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Zastanawia mnie jedno, czy za pomocą wtyczek można ignerować w wyświetlany kod HTML strony?
Tzn zmieniać jakiś string (za pomocą replace?), bądź dodawać nowy...
I czy w JS używać content.document, document czy window.document ?
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Re: Ingerencja w kod HTML strony
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Grapp pisze:Siemka :)
Zastanawia mnie jedno, czy za pomocą wtyczek można ignerować w wyświetlany kod HTML strony?
Tzn zmieniać jakiś string (za pomocą replace?), bądź dodawać nowy...
Oczywiście. Ale nie należy w tym celu edytować źródła (jeśli to masz na myśli mówiąc o edycji stringów), ale używać DOM-u.
I czy w JS używać content.document, document czy window.document ?
Jeśli chcesz uzyskać dostęp do wyświetlane strony www, to oczywiście contentDocument (a nie content.document). contentDocument to własność elementu browser będąca aktualnie załadowanym dokumentem.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Oczywiście. Ale nie należy w tym celu edytować źródła (jeśli to masz na myśli mówiąc o edycji stringów), ale używać DOM-u.
Chodzi mi głównie o to, by po zainstalowaniu wtyczki i jej uruchomieniu (powiedzmy z pod PPM) wszystko co powinno zdefiniowane do zamienienia się zamienia.
Możesz podać jakieś przydatne linki?
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
- Kod: Zaznacz cały
var anchorTags = contentDocument.getElementsByTagName("a");
for (var i = 0; i < anchorTags.length ; i++)
{
alert("Href of " + i + "-th element is : " + anchorTags[i].href + "\n");
}
Ale nie wyrzuca mi żadnego alerta :\
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
contentDocument to własność elementu browser będąca aktualnie załadowanym dokumentem.
Tak więc musisz więc odnaleźć element XUL browser i wziąć browser.contentDocument.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
- Kod: Zaznacz cały
<!-- shows Mozilla homepage inside a groupbox -->
<groupbox flex="1">
<caption label="Mozilla homepage"/>
<browser type="content" src="http://portal.x-wars.pl/index.php?topic=login" flex="1"/>
</groupbox>
i w funkcji JS dopisać broswer. do contentDocument ?
Alerty się nie wyświetlają, i mam dodatkowe okienko, które defakto nie chce mieć :\
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Ok, po prostu powiem od początku do końca, bo inaczej do niczego nie dojdziemy.
Element browser zawiera załadowany dokument strony, do którego referencja jest przechowywana we własności contentDocument. Musimy więc odnaleźć odpowiedni browser i skorzystać z owej własności.
Jednak browserów może być wiele, bo, jak wiadomo, Firefox oferuje przeglądanie w kartach i może zawierać wiele stron. Za zarządzanie kartami odpowiada element tabbrowser.
Tak więc:
- Kod: Zaznacz cały
var doc = getBrowser().selectedBrowser.contentDocument;
getBrowser() jest funkcją specyficzną dla głównego okna Firefoksa, zwracającą tabbrowser.
selectedBrowser to własność tabbrowsera, która zwraca browser aktualnie zaznaczonej karty
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Jednak napotkałem jeden problem, przy użyciu funkcji replace:
- Kod: Zaznacz cały
doc.write(doc.replace(/test/, "xyz"));
Tak wygląda kod (oczywiście uwzględniając to co podałeś powyżej), jednak nie podmienia test na xyz :\
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Acha, no i czy dobrej funkcji użyłem, jeżeli chodzi o podmiane tekstu?
I czy znasz jakąś funkcje, do przeszukania dokumentu, by zwróciło mi taki wynik, bym mógł po przeszukanym tekście coś wstawić.
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061025 BonEcho/2.0
Grapp pisze:Które konkretnie ?
Na stronę HTML musisz widzieć jako drzewo DOM. Jeśli jeśli tego podejścia "nie czujesz", to najpierw przydałoby się poczytać o DOM-ie, pobawić się rozszerzeniem DOM Inspector - to podstawa.
Jeśli chcesz więc modyfikować, dodawać bądź usuwać tagi, to używaj metod takich jak appendChild(), replaceChild() itp. Poprzeglądaj sobie http://developer.mozilla.org/en/docs/DOM:element.
Acha, no i czy dobrej funkcji użyłem, jeżeli chodzi o podmiane tekstu?
Funkcji dobre, z tym że użyłeś jej na złym obiekcie. replace() jest standardową metodą JavaScript dostępną stringów, a ty użyłeś jej na dokumencie. edit: tzn to działa, ale to zamiast tego lepiej jest operować na poszczególnych stringach a nie na całym "zestringowanym" dokumencie.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Jeśli chcesz więc modyfikować, dodawać bądź usuwać tagi, to używaj metod takich jak appendChild(), replaceChild() itp. Poprzeglądaj sobie http://developer.mozilla.org/en/docs/DOM:element.
Wlasnie przedchwila to znalazlem:)
Ale pojawil sie kolejny problem...
Otoz wszystkie operaje chce wykonywac na ramce, ktorej zawartosc to jest jakis inny plik.
Nawet proste odszukanie elementu poprzez:
- Kod: Zaznacz cały
doc.getElementById("id");
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
- Kod: Zaznacz cały
var frame = getBrowser().selectedBrowser.contentDocument.nazwaRamki;
?
i potem odpowiednio frame.getElementById()
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Grapp pisze:Czyli mam uzyc:
- Kod: Zaznacz cały
var frame = getBrowser().selectedBrowser.contentDocument.nazwaRamki;
?
i potem odpowiednio frame.getElementById()
Blisko. ;)
Nie ma czegoś takiego, jak contentDocument.nazwaRamki. Ramka to element, jak każdy inny, który też musisz znaleźć przy pomocy getElementById() lub podobnych.
- Kod: Zaznacz cały
var browserDoc = getBrowser().selectedBrowser.contentDocument;
var frameDoc = browserDoc.getElementById('id-ramki').contentDocument;
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Jeszcze jedno:
Funkcji dobre, z tym że użyłeś jej na złym obiekcie. replace() jest standardową metodą JavaScript dostępną stringów, a ty użyłeś jej na dokumencie. edit: tzn to działa, ale to zamiast tego lepiej jest operować na poszczególnych stringach a nie na całym "zestringowanym" dokumencie.
Tzn. jak ?
Bo nie moge sobie w moim przypadku wziac np getElementById(), bo to co chce przeszukac to kod HTML, i tak sie sklada, ze to tabelki i inne pierdolki, w ktorych nie ma ID, czytez NAME.
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Grapp pisze:Hehe wielkie dzieki :)
Tzn. jak ?
Bo nie moge sobie w moim przypadku wziac np getElementById(), bo to co chce przeszukac to kod HTML, i tak sie sklada, ze to tabelki i inne pierdolki, w ktorych nie ma ID, czytez NAME.
Są inne metody, np. getElementsByTagName(). Jeśli wiesz, że to, czego szukasz znajduje się w jakimś konkretnym tagu, to użyj właśnie tego.
Btw, wygląda na to, że mylnie zgadywałem i czegoś takiego, jak document.replace() w Gecko w ogóle nie ma.
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1) Gecko/20061010 Firefox/2.0
Wielkie dzięki.
Tylko teraz mam problem.
Wtyczka mi elegancko działa, z tymże jest jeden problem.
Działa tylko przy pierwszym odświeżeniu, a gdy chodzę po niej, klikając w linki, to żadna funkcja nie jest realizowana, nawet zwykłe alert("a");
- Grapp
- Posty: 22
- Z nami od: 29 października 2006, 15:55
Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
Grapp pisze:OKi to to już zrobiłem :)
Wtyczka mi elegancko działa, z tymże jest jeden problem.
Działa tylko przy pierwszym odświeżeniu, a gdy chodzę po niej, klikając w linki, to żadna funkcja nie jest realizowana, nawet zwykłe alert("a");
A jak wywołujesz te funkcje?
- Ancestor
- Moderator
- Posty: 1799
- Z nami od: 11 czerwca 2005, 20:25
- Lokalizacja: Sopot
Wróć do Programowanie z użyciem technologii Mozilli
Kto jest online
Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]