Я хочу вызвать функцию после загрузки документа, но документ может или не может завершить загрузку еще. Если он загрузился, то я могу просто вызвать функцию. Если он НЕ загружается, тогда я могу прикрепить прослушиватель событий. Я не могу добавить список событий после того, как onload уже запущен, так как он не будет вызван. Так как я могу проверить, загружен ли документ? Я попробовал код ниже, но он не совсем работает. Любые идеи?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
Ответы:
Нет необходимости во всем коде, упомянутом галамбалазами. Кросс-браузерный способ сделать это на чистом JavaScript - это просто проверить
document.readyState
:Это также, как это делает jQuery.
В зависимости от того, где загружен JavaScript, это может быть сделано в интервале:
На самом деле
document.readyState
может иметь три состояния:Так что, если вам нужен только DOM, проверьте
document.readyState === "interactive"
. Если вам нужна вся страница, включая изображения, проверьтеdocument.readyState === "complete"
.источник
document.readyState == "complete"
это означает, что все, включая изображения, были загружены.document.readyState
чтобы убедиться, что функция запускается после анализа DOM или позже, в зависимости от того, когда она была вызвана. Есть ли мероприятие для интерактиваreadyState
?/loaded|complete/.test(document.readyState)
. Некоторые браузеры устанавливаютdocument.readyState
«загружен» вместо «завершен». Кроме того, document.readyState НЕ гарантирует, что шрифты были загружены, нет действительно хорошего способа проверить это без плагина.document.onreadystatechange
? Это кажется более упорядоченным, если браузеры поддерживают его. stackoverflow.com/questions/807878/…document.readyState !== "loading"
состояние "DOM ready". Это предотвращает возникновение проблем, еслиreadyState
по какой-либо причине проверка выполняется поздно (после «интерактивного» состояния).Нет необходимости в библиотеке. JQuery использовал этот сценарий некоторое время, кстати.
http://dean.edwards.name/weblog/2006/06/again/
источник
init
не будет работать, если этот код, который вы опубликовали, включен после того, как страница уже загружена, что является точкой ОП: он / она не может контролировать, когда включен его сценарий. (обратите внимание, чтоsetInterval
будет работать только ветка)Вы, вероятно, хотите использовать что-то вроде jQuery, что облегчает программирование на JS.
Что-то вроде:
Казалось бы, делать то, что вы после.
источник
ready()
вызывается ли после загрузки документа, переданная функция запускается немедленно.источник
document.loaded
всегда определеноbody.readyState === 'loaded'
Если вы действительно хотите, чтобы этот код выполнялся при загрузке , а не при загрузке (т. Е. Необходимо, чтобы изображения также загружались), то, к сожалению, функция ready не делает этого за вас. Я вообще просто делаю что-то вроде этого:
Включить в документ javascript (то есть всегда вызывать до запуска onload):
Тогда ваш код:
(Или эквивалент в вашей структуре предпочтений.) Я использую этот код для предварительного кэширования javascript и изображений для будущих страниц. Поскольку материал, который я получаю, вообще не используется для этой страницы, я не хочу, чтобы он имел приоритет над быстрой загрузкой изображений.
Возможно, есть лучший способ, но я еще не нашел его.
источник
Mozila Firefox говорит, что
onreadystatechange
это альтернативаDOMContentLoaded
.В документе
DOMContentLoaded
Мозила говорится:Я думаю, что
load
событие должно использоваться для полной загрузки документа + ресурсов.источник
Вышеупомянутый с JQuery является самым простым и наиболее часто используемым способом. Однако вы можете использовать чистый javascript, но попытаться определить этот скрипт в голове, чтобы он читался в начале. То, что вы ищете, это
window.onload
событие.Ниже приведен простой скрипт, который я создал для запуска счетчика. Счетчик останавливается после 10 итераций
источник
Попробуй это:
источник
У меня есть другое решение, мое приложение должно быть запущено при создании нового объекта MyApp, поэтому оно выглядит так:
это работает на всех браузерах, которые я знаю.
источник