Hardcoded thoughts… mostly in C# or php

onLoad w IE

Podczas prac nad pewnym projektem, w którym mam wątpliwą przyjemność uczestniczyć, pojawił się ostatnio problem konieczności wywoływania kodu JS przy każdym wejściu na stronę. Rozwiązanie samo się nasuwa - onLoad w body. Ważne jednak było, by funkcja ta wywoływała się również przy cofaniu do strony poprzedniej, nie tylko przy ponownym wywoływaniu. Twierdziłem, że to jest niemożliwe, znajomy - że jak najbardziej. Okazało się, że obaj mieliśmy rację. W niestandardowej przeglądarce, jaką bez wątpienia jest Internet Explorer (w wersji 6.0), komendy zawarte w onLoad wykonywane są przy każdym wejściu na stronę, bez względu na to, czy było to ponowne wywołanie, czy użycie np. history.back(). U reszty (czyt FF 1.5, O9) onLoad wywoływane jest tylko podczas przeładowania strony, a zatem TYLKO raz. Najgorsze jest to, że to właśnie zachowanie IE jest w tym konkretnym przypadku jak najbardziej wskazane. Jak podobny efekt osiągnąć w FF/O - nie mam pojęcia.

Comments

  1. m
    July 31st, 2006 | 21:03

    bez sensu - co to za kod?

  2. tas
    July 31st, 2006 | 21:37

    chodzi o przywracanie wartości poprzednio wpisanych w formularzu, przy czym sam formularz jest budowany przez js, wiec nie jest uzupełniany automatycznie.

  3. August 1st, 2006 | 12:04

    Jeśli zależy Wam na takim zachowaniu, proponuję skorzystać z biblioteki Yahoo Utilities (YUI) albo jQuery i użyć funkcji dodawania akcji po załadowaniu się elementu na stronie (przed onload). Bardzo przydatne, [script] w body na końcu wreszcie zniknie ze stron.

  4. August 1st, 2006 | 12:13

    Firefox po prostu ze względu na szybkość, jak wciśniesz klawisz wstecz ładuje stronę z cache’a w takim stanie jakim ją zostawiłeś.. w ogóle nie wysyła zapytania do serwera.. i myślę, że to jest zachowanie ok.
    I to nie jest tak, że musisz stronę przeładować.. jak wejdziesz na stronę z jakiegokolwiek odnośnika a strona zostanie załadowana ponownie z serwera i wszystkie skrypty na nowo się przetworzą.
    Zatem rozumiem, że u Ciebie problem jest tylko wtedy kiedy wracasz na stronę poprzez klawisze historii przeglądania, tak?
    I co jest nie tak.. formularz, który został uprzednio utworzony przez js nie jest załadowany? Dane w nim są wyczyszczone?

  5. tas
    August 1st, 2006 | 12:43

    Riddle: na przyszłośc na pewno się przyda ;) - na szczęście obecny serwis ma być stworzony pod IE 6 i inne przeglądarki po prostu nas nie obchodzą - takie wymaganie i życzenie

    medyk: wiem, że FF ładuje z cache stronę. IE podobnie. Ale Ie przy okazji wywołuje to, co jest zawarte w onLoad, FF już tego nie robi (po wciśnięciu cofnij lub użyciu history.back())

  6. August 1st, 2006 | 15:24

    Myślę, że możesz to łatwo naprawić korzystając z onfocus na dokumencie.

  7. August 2nd, 2006 | 06:56

    Firefox umie ondomcontentloaded, użyj go razem z arguments.calee.done żeby sprawdzić czy funkcja nie została wykonana 2x…

  8. August 2nd, 2006 | 10:16

    Riddle.. autorowi z tego co rozumiem chodzi o coś zupełnie innego (zachowanie przeglądarki przy powrocie do strony poprzez historię).. myślę, że tak jak i load tak i DOMContentLoaded nie zadziała u niego.
    Poza tym w FF nie trzeba sprawdzać czy DOMContentLoaded się nie wywołuje ponownie (z zasady się nie wywoła) ten hack jest dla IE i innych, w których próbujemy imitować zachowanie DOMContentLoaded

Leave a reply