Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
=> Sytuacja wyglada nastepujaco:
Mam index.html i frame w nim... w frame jest strona ktorej nie moge modyfikowac - strona z linkami otwierajacymi sie w nowym oknie. => Chcialbym: Tak zakombinowac, zeby po kliknieciu w ktoregos linka nie tylko otwieralo sie okno z zawartoscia strony do ktorej sie link odnosi, ale takze zmieniala strona z ktorej kliknieto (cala niekoniecznie tylko frame) na jakas inna. Zaznaczam ze moge edytowac tylko index.html a nie strone z linkami sama w sobie. => Czy jest to mozliwe? A jesli jest to mozliwe to bylbym wdzieczny za pomoc jak tego dokonac. Pozdrawiam FlashT |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%)
|
z frama robisz getElementsByTagName("a"); i dodajesz onclicka...
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
Cytat(ActivePlayer @ 2005-09-26 18:11:28) z frama robisz getElementsByTagName("a"); i dodajesz onclicka... Jak juz mowilem nie moge edytowac strony ktora jest w frame... moge edytowac tylko ta strone na ktorej ten frame jest umieszczony. |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam ...
to nie ma znaczenia ... poprzez DOM odnosisz się do skruktury dokumentu wewnątrz ramki ... tam wyszukujesz dany link (np. po zawartości atrubutu href) i dodajesz mu event onclick ... pozdrawiam |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
Cytat(orson @ 2005-09-26 18:38:19) witam ... to nie ma znaczenia ... poprzez DOM odnosisz się do skruktury dokumentu wewnątrz ramki ... tam wyszukujesz dany link (np. po zawartości atrubutu href) i dodajesz mu event onclick ... pozdrawiam Ok... ale ze gdzie ja mam wsadzic to GetElementById ? Bo sprawa wyglada mniej wiecej tak (kod skopiowany skads tam wiec prosze sie nie czepiac jakis brakujacych elementow): http://debug.theweed.org/js Moge edytowac tylko index.html a frame.html juz nie. Warto zwrocic uwage na to, ze funkcja ga ma sie rowniez wykonywac po kliknieciu. Jakby ktos nie umial korzystac z prawego przycisku myszy: Index.html Frame.html
PS. Przyznaje sie bez bicia ze o JS nie mam zielonego pojecia... o Javie samej w sobie troszeczke. Ten post edytował flasht 27.09.2005, 08:52:52 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam ...
hmm ... nie bardzo wiem z czym masz problem ... ta funkcja ga ... to jest twoja funkcja (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) co ona robi (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) bo narazie nigdzie nie jest wywoływana ... a jeżeli chodzi o linki ... w index.html dodajesz kod który odwołuje się do ramki po jej id: Kod var frameDoc = document.getElementById('<frame_id>').contentDocument; i potem normalne operacje na domie można robić tylko zamiast np. document.getElementsByTagName('a') dajesz frameDoc.getElementsByTagName('a') i masz wszystkie linki z dokumentu w ramce ... potem robisz na tej kolekcji fora i dodajesz event onclick=function (){ ga(<param1>, <param2>); } pozdrawiam edit: kod pobierania dokumentu z ramki jest oczywiście zgodny ze specyfikacją w3c DOM więc nie działa w ie :| poniżej funkcja która zwraca dokument w zależności od przeglądarki: Kod function getIFrameDocument(aID){ var rv = null; // if contentDocument exists, W3C compliant (Mozilla) if (document.getElementById(aID).contentDocument){ rv = document.getElementById(aID).contentDocument; } else { // IE rv = document.frames[aID].document; } return rv; } wywołanie zmieni się więc na takie: Kod var frameDoc = getIFrameDocument('<frame_id>'); dalej już tak samo ... |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
Cytat(orson @ 2005-09-27 10:07:37) hmm ... nie bardzo wiem z czym masz problem ... ta funkcja ga ... to jest twoja funkcja (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) co ona robi (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) bo narazie nigdzie nie jest wywoływana ... Nie to funkcja z frame i tylko taka podalem nie wazne co robi wazne ze ona tez ma byc wykonywana... A jest wywolywana...
... i ma byc niezaleznie od tego co ja dodam. ... Mecze sie z tym i jakos nie moge tego zrobic... moglbys bardzo pieknie prosze dac mi jakis konkretny przyklad? W index.html daje: <script> <!-- var frame = null; linki = null; function getIFrameDocument(aID){ var rv = null; if (document.getElementById(aID).contentDocument){ rv = document.getElementById(aID).contentDocument; } else { rv = document.frames[aID].document; } return rv; } frame = getIFrameDocument(frameID); linki = frameDoc.getElementsByTagName('a'); (no i tutaj... niby jaka petla zeby wydobyc wszystkie "a"? da sie jakos jeszcze je przefiltrowac zeby to byly tylko linki do stron zawierajacych jakies slowo? np 'wp.pl' ?) <poczatek petli> for(i=1,i<=linki.count,i++){ linki[i].onClick=... ? a tutaj jak?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) } <koniec petli> //--> </script> Ten post edytował flasht 27.09.2005, 13:27:57 |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam ...
tu masz błąd: Kod frame = getIFrameDocument(frameID); linki = frameDoc.getElementsByTagName('a'); w moim przykładzie do zmiennej frameDoc przypisywałem wynik z funkcji ... skoro zmieniłeś tą zmienną to zmień ją wszędzie! powinno być tak: Kod frame = getIFrameDocument(frameID); linki = frame.getElementsByTagName('a'); a co do pętli: Kod for(var i = 0; i < linki.length; i++){ if (linki.item(i).innerText == 'wp.pl'){ //lub inny warunek linki.item(i).onclick= function (){ window.open(this.href); // to sobie musisz sprawdzić czy we wszystkich przeglądarkach jest this ... - tu sięotwiera nowe okno z zawartością z linku document.location.href="http://www.onet.pl"; // tu tez nie jestem pewien czy tak można ... jak coś to document.getElmentById('id_iframe') - lub prarent.document (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) i src="http://www.onet.pl/" -- tu sie strona przeładowuje } } } pisane z palca ... na bank nie będzie działać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale masz już jakiś szkielet ... pozdrawiam |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
O... teraz to juz cos kumam, ale nie do konca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Index.html wyglada teraz tak:
Ale... 1. W IE skrypt w ogole nie jest wykonywany. 2. W Operze skrypt jest zle wykonywany... znaczy... strona zmienia sie na onet.pl po kliknieciu ale nic innego sie nie dzieje... a mi zalezy na tym zeby funkcja ga() bylo wykonywana jak wczesniej i nie jest to funkcja ktora moge zmieniac bo jest w IFrame. Probowalem zmienic OnClick w powyzszym kodzie na OnRelease ale wtedy zachowuje sie jakby w ogole nie mial tego skryptu:( OnMouseDown i OnMouseUp tez nic nie zmienia... Hmm... przed chwila sprawdzilem i juz w ogole nie dziala... w operze w sensie skrypt niby jest wykonywany - alerty sie pokazuja ale pozniej jakby go nei bylo. Ok... juz doszedlem do tego, ze eventy trzeba pisac malymi literami bo inaczej nie dzialaja... (dziwne jakies)... teraz jak dalem onmousedown to wszystko jest wpozo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )) tylko ze w IE w ogole nie wykonuje tego skryptu... nawet debugowe alerty sie nei pokazuja (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Ten post edytował flasht 28.09.2005, 08:09:58 |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam ...
dlatego że frameset (czyli dokument z ramkami) nie powinien mieć tagu body ... dodaj 2 ramkę 2x2 i w niej dokument ze skryptem ... tylko wtedy musisz zmienić troszkę skrypt ... w funkcji getIFrameDocument zmień document na parent.document (odwołujesz się z ramki to rodzica i z rodzica pobierasz obiekt dokument innej ramki ... trochę zagmatwane ale jak napiszesz to składnią kropkową to jest looz - wszystko widać) ... dalej nie zmieniaj ... event onclick jest wykonywany w kontekście dokumentu w ramce ... pozdrawiam |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%)
|
A jeszcze jedna rzecz... potrzebuje sprawdzic czy link zawiera jakies slowo... chodzi mi o href a nie o to co jest pomiedzy <a> </a> ... jest jakas taka funkcja odpowiednik pos w delphi albo strstr w php ?
|
|
|
|
![]() ![]() |
|
Aktualny czas: 20.12.2025 - 06:32 |