![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
jak nadać zdarzenie onload dla otwieranego okna z poziomu dokumentu otwierającego?
[xml:1:cda700e341] <script type="text/javascript"> var win = window.open('dokument.html'); win.window.onload = funkcja; </script> [/xml:1:cda700e341] Powyższe nie działa PS: zaznaczam, że zależy mi na wykonaniu tego z poziomu dokumentu tworzącego okno a nie z poziomu okna. -------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#2
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi sie ze window.open zwraca instancje do obiektu nowego okna, a więc w zmiennej var jest obiekt typu window, w związku z tym powinieneś jego własciwość zmieniać w ten sposób:
[xml:1:9af2f8c87f]<script type="text/javascript"> var win = window.open('dokument.html'); win.onload = funkcja; </script>[/xml:1:9af2f8c87f] Mam nadzieje że moje rozumowanie jest dobre ![]() -------------------- "Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 636 Pomógł: 0 Dołączył: 22.10.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Najlatwiej bedzie zrobic tak, ze zrobisz to bez pliku dokument.html - tzn.
Kod function nowe_okno(onload){
okno = window.open(); html = '....<body onload="'+onload+'">....'; okno.document.write(html); okno.document.close(); } mozna kombinowac jeszcze jesli chce sie dynamicznie zmieniac wartosc.... - tzn. trzymac zawartosc tego okna w polu hidden i potem traktowac funkcja eval |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
Cytat Wydaje mi sie ze window.open zwraca instancje do obiektu nowego okna, a więc w zmiennej var jest obiekt typu window, w związku z tym powinieneś jego własciwość zmieniać w ten sposób:
[xml:1:6b2ef16a47]<script type="text/javascript"> var win = window.open('dokument.html'); win.onload = funkcja; </script>[/xml:1:6b2ef16a47] Mam nadzieje że moje rozumowanie jest dobre ![]() to też próbowałem... bezskutecznie -------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
Cytat Najlatwiej bedzie zrobic tak, ze zrobisz to bez pliku dokument.html - tzn.
Kod function nowe_okno(onload){
okno = window.open(); html = '....<body onload="'+onload+'">....'; okno.document.write(html); okno.document.close(); } mozna kombinowac jeszcze jesli chce sie dynamicznie zmieniac wartosc.... - tzn. trzymac zawartosc tego okna w polu hidden i potem traktowac funkcja eval problem w tym, że dokument docelowy już istnieje i nie mogę go modyfikować (również dynamicznie) -------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Podejście pierwsze:
Cytat Wydaje mi sie ze window.open zwraca instancje do obiektu nowego okna, a więc w zmiennej var jest obiekt typu window, w związku z tym powinieneś jego własciwość zmieniać w ten sposób:
... Nie. Atrybut window klasy Window wskazuje na siebie. A zatem Kod win.onload == win.window.onload == win.window.window.onload
Podejście drugie: Cytat Najlatwiej bedzie zrobic tak, ze zrobisz to bez pliku dokument.html - tzn.
... Nie. Po pierwsze, onload jest funkcją, a nie stringiem. Po drugie, nie wystarczy przypisać funkcję do body.onload, trzeba jeszcze dostarczyć definicję funkcji. A tej nowe okno nie ma, bo funkcja jest zdefiniowana w oknie głównym. Teraz, wracając do tematu... Cytat jak nadać zdarzenie onload dla otwieranego okna z poziomu dokumentu otwierającego?
To co podałeś nie działa nie dlatego, że kod jest niepoprawny, tylko dlatego, że najpierw tworzysz okno, a potem przypisujesz funkcję do onload. Funkcja się nie uruchomi, bo okno już jest utworzone i załadowane, zdarzenie load wykonało się linijkę wcześniej. I tego nie przeskoczysz. Proponuję Kod <script type="text/javascript">
var win = window.open('dokument.html'); win.onload = funkcja; win.onload(); </script> |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
Cytat Proponuję
Kod <script type="text/javascript"> var win = window.open('dokument.html'); win.onload = funkcja; win.onload(); </script> Niestety to wykonuje się zaraz po otworzeniu okna a nie po załadowaniu zawartości zawartej w nim. Z tego co wiem zdarzenie onload powinno się wykonać po załadowaniu całego ciała dokumentu oraz wszystkich tablic obrazków. Skrypt jest mi potrzebny aby pobierać rozmiar elementu BODY po całkowitym załadowaniu. Niestety teraz wykonuje się jeszcze przed załadowaniem się BODY i albo wywala mi błąd, że win.document.body nie istnieje, albo jeśli już zaczął wczytywać, to dosatję rozmiar 0x0, co oznacza, że nie wczytał jeszcze całej jego zawartości (w moim przypadku paru obrazków) -------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Aaaaa, i tu jest pies pogrzebany!
Uhm, nie skojarzyłem różnicy między załadować i otworzyć :oops: . Dobra, w takim razie podejście już chyba w sumie czwarte. Tym razem trochę bardziej skomplikowane. 1) Zmieniasz definicję funkcja(): Kod <script type="text/javascript">
function funkcja(wnd) { //zrób cokolwiek, ale zamiast this.cośtam używaj wnd.cośtam } </script> Czyli funkcja() ma działać nie na "swoim" oknie, ale na podanym. 2) Wstawiasz do dokument.html: Kod <script type="text/javascript">
function foo() { window.bar(window); } </script> 3) Zmieniasz <body> w dokument.html na <body onload="foo()"> 4) Zmieniasz swój javascript na: Kod <script type="text/javascript">
var win = window.open('dokument.html'); win.bar = funkcja; </script> Czyli funkcja zostaje w głównym dokumencie, a nowy dokument dostaje jedynie referencję do funkcji, którą sam sobie musi uruchomić. A funkcja musi wiedzieć na którym oknie operuje. Teraz to już powinno działać bo nawet sprawdziłem ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
dzięki, pomysłowe... jednak
Cytat Wstawiasz do dokument.html:
nie jest możliwe, pomimo, że "dokument.html" znajduje się w tym katalogu jest to dokument którego nie mogę zmieniać (pisałem też powyżej o tym)... po prostu chcę wywołać pewną funkcję po załadowaniu w popupie danego dokumentu, bez zmiany jego treści... czy jest to wogóle możliwe? i czemu zdarzenie "obceokno.onload = procedura" nie działa? -------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 20.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
jakiś pomysł?
-------------------- cieżko jest żyć lekko
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Brak kolejnych postów dowodzi, że chyba nic lepszego nie da się wymyśleć.
Co do pytania: czemu to nie działa tak jak chcesz, ja odpowiem tak: zastosowanie jest nieco zakręcone i specyfikacja języka nie mówi jak dokładnie powinno to być obsłużone, więc niczego nie można wymagać :wink: . Nie działa pewnie dlatego, że albo zdążył już sobie wczytać i olewa, albo nie zdążył, i przy wczytywaniu nadpisuje i olewa. Albo w ogóle olewa z zasady ![]() Więc co jeszcze możesz zrobić: Możesz zastanowić się jakich elementów dokumentu potrzebujesz w tym onload, i poczekać aż one się załadują. Ustawić na timeoucie jakąś funkcję która będzie sprawdzała czy odpowiednie elementy już są, albo czy obrazki się załadowały (obrazki mają do tego jakiś atrybut). To już zależy co w tym dokumencie jest i czy tak się da. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 7.07.2025 - 20:24 |