/ / Czy jQuery $ (okno) .load (); zdarzenie nie jest uruchamiane na stronach bez deklaracji <! DOCTYPE>? (… W skrypcie zawartości rozszerzenia Chrome) - javascript, jquery, events, google-chrome-extension, doctype

Czy jQuery $ (window) .load (); zdarzenie nie jest uruchamiane na stronach bez deklaracji <! DOCTYPE>? (... w skrypcie z rozszerzeniem chrome) - javascript, jquery, events, google-chrome-extension, doctype

Pracuję nad rozszerzeniem do przeglądarki Google Chrome, które manipuluje stroną internetową, ale po jej częściowym załadowaniu (DOM) lub pełnym załadowaniu (z obrazami).

Wygląda na to, że wiele witryn korzysta obecnie z rozszerzenia

<!DOCTYPE html>

deklaracji lub jakiejś jej odmiany, ale wiele innych nie. Pytanie dotyczy głównie typów dokumentów HTML ... Nie jestem pewien co do pozostałych.

Czy można bezpiecznie założyć, że jeśli strona internetowa nie ma deklaracji DOCTYPE, to $ (okno) .load (); nie zostanie zwolniony?

Na początku używałem $ (document) .ready (); (gdy DOM jest ładowany), ale później przełączony na $ (okno) .load (); (aby umożliwić załadowanie obrazów).

Rzecz w tym, że teraz $ (window) .load (); wydaje się nie działać, jeśli nie ma DOCTYPE. $ (dokument) .ready (); wydaje się działać na wszystkich stronach, niezależnie od tego, czy DOCTYPE jest zadeklarowany, czy nie.

Może to będzie przydatne dla innych z tym samym problemem. Szukałem trochę i nie znalazłem decydującej odpowiedzi. Wygląda na to, że w końcu użyję czegoś takiego:

if (window.document.doctype != null) {$(window).load(checkEntries);}
if (window.document.doctype == null) {$(document).ready(checkEntries);}

Myślę, że moje pytanie brzmi ... Czy to normalne, że trzeba sprawdzać DOCTYPE, aby wiedzieć, którego zdarzenia użyć? A może coś mi tu brakuje?

Zasadniczo, dlaczego $ (window) .load (); wydaje się nie odpalać, jeśli nie ma deklaracji DOCTYPE?

Odpowiedzi:

6 dla odpowiedzi № 1

Zasadniczo nie powinieneś używać $ (okno).load (), ponieważ nie jest w pełni obsługiwany. Jeśli naprawdę tego potrzebujesz, powyższe rozwiązanie jest najlepsze, co możesz zrobić. Strona jQuery ładnie podsumowuje zastrzeżenia:

Ostrzeżenia dotyczące zdarzenia ładowania, gdy są używane z obrazami

Typowe wyzwanie, które programiści próbują rozwiązaćprzy użyciu .load () skrótem jest wykonanie funkcji, gdy obraz (lub kolekcja obrazy) zostały całkowicie załadowane. Istnieje kilka znanych zastrzeżeń dotyczących to należy zauważyć. To są:

  • Nie działa konsekwentnie ani niezawodnie w różnych przeglądarkach
  • Nie działa poprawnie w WebKit, jeśli obraz src jest ustawiony na taki sam src jak poprzednio
  • Nie powoduje prawidłowego bąbelkowania drzewa DOM
  • Może przestać strzelać do obrazów, które już znajdują się w pamięci podręcznej przeglądarki

URL: http://api.jquery.com/load-event/


3 dla odpowiedzi № 2

The .ready() metoda jest ogólnie niezgodna z <body onload=""> atrybut. Jeśli trzeba użyć load, albo nie używaj .ready (), albo użyj jQuery .load() metoda dołączania programów obsługi zdarzeń ładowania do okna lub do bardziej konkretnych elementów, takich jak obrazy.