Делает jQuery $(окно).load (); событие не срабатывает на страницах без объявления? (...в скрипте содержимого расширения chrome)


Я работаю над расширением Google Chrome, которое управляет веб-страницей, но после того, как она либо частично загружена (DOM), либо полностью загружена (с изображениями).

Похоже, что многие сайты в настоящее время используют

<!DOCTYPE html>

Объявление, или некоторые его вариации, но многие другие этого не делают. Речь идет в основном о HTML-доктипах...Насчет остальных я не уверен.

Можно ли с уверенностью предположить, что если веб-страница не имеет объявления DOCTYPE, то $(window).load (); не будет уволен?

Вначале я использовал $(document).ready (); (для загрузки DOM), но позже переключился на $(window).load (); (чтобы изображения тоже загружались).

Дело в том, что теперь $(окно).load (); кажется, не работает, если нет DOCTYPE. $(документ).ready (); кажется, работает на всех страницах, независимо от того, объявлен ли DOCTYPE или нет.

Может быть, это может быть полезно для других с этой же проблемой. Я поискал немного и не нашел решительного ответа. Кажется что я в конечном итоге использую что-то вроде этого:

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

Я думаю, что мой вопрос таков... Является ли это нормальным, чтобы проверить DOCTYPE, чтобы знать, какое событие использовать? Или я что-то упустил?

В принципе, почему $(окно).load (); кажется, не срабатывает, если нет объявления DOCTYPE?

2 9

2 ответа:

В принципе, вы не должны использовать $(window).load (), так как он не полностью поддерживается. Если вам действительно это нужно, то ваше решение выше-лучшее, что вы можете сделать. Страница jQuery прекрасно резюмирует предостережения:

Предупреждения о событии загрузки при использовании с изображениями

Распространенная проблема, которую разработчики пытаются решить с помощью .загружать() ярлык предназначен для выполнения функции, когда изображение (или коллекция изображения) полностью загрузились. Есть несколько известных предостережений с это то, что следует отметить. Это:

  • он не работает последовательно и надежно в кросс-браузере
  • он не срабатывает корректно в WebKit, если образ src установлен на тот же src, что и раньше
  • он неправильно пузырится в дереве DOM
  • может прекратить огонь для изображений, которые уже живут в кэше браузера

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

Метод .ready() обычно несовместим с атрибутом <body onload="">. Если нагрузка должна быть использована, либо не использовать .ready () или используйте метод jQuery .load(), чтобы прикрепить обработчики событий загрузки к окну или к более конкретным элементам, таким как изображения.