У меня проблемы с событиями window.onload и document.onload. Все, что я прочитал, говорит мне, что они не сработают, пока DOM не будет полностью загружен всеми своими ресурсами, кажется, что это не происходит для меня:
Я попробовал следующую простую страницу в Chrome 4.1.249.1036 (41514) и IE 8.0.7600.16385 с одинаковым результатом: оба отобразили сообщение «Не удалось!», Указывая, что myParagraph не загружен (и поэтому DOM кажется неполным ).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript">
window.onload = doThis();
// document.onload gives the same result
function doThis() {
if (document.getElementById("myParagraph")) {
alert("It worked!");
} else {
alert("It failed!");
}
}
</script>
</head>
<body>
<p id="myParagraph">Nothing is here.</p>
</body>
</html>
Я использую более сложные сценарии, чем этот, во внешнем файле .js, но это иллюстрирует проблему. Я могу заставить его работать, установив в window.onload таймер на полсекунды для запуска doThis (), но это кажется неэффективным решением и не дает ответа на вопрос, почему window.onload, похоже, не выполняет то, что все говорят, что это так. Другое решение состоит в том, чтобы установить таймер, который будет проверять, загружен ли DOM, и если нет, он будет вызывать себя через полсекунды (так что он будет продолжать проверять, пока не будет загружен DOM), но это кажется мне слишком сложным.
Есть ли более подходящее событие для использования?