Это довольно старая тема, но я нашел решение, которое могло бы помочь другим.
Я добавлял функцию к window.onload
через динамически внедренный скрипт (действительно, чтобы имитировать загрузку внешнего скрипта по причинам, которые не важны в этом контексте). Как указано в этом посте, при первой загрузке в IE8 window.onload
не будет запускаться, но будут выполняться все последующие вызовы.
Я обнаружил, что если я добавлю это в HTML-файл как внутренний скрипт, он будет работать каждый раз:
var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };
Весь приведенный выше код незаметно "инициализирует" IE8 window.onload
. Я подозреваю, что IE8 не может вызвать window.onload
в первый раз, если он вызывается из внешнего скрипта, так как событие onload
еще не прикреплено к окну (или, с технической точки зрения, его typeof не определен). Похоже, что впервые IE8 делает это: присоединение onload
к окну без его правильного выполнения.
Приведенный выше код становится вполне очевидным: мы просто заставляем IE8 распознать событие onload
. Нам не важно, что выполняется, а что нет, поэтому мы просто следим за передачей через любой существующий код window.onload
, который уже определен (просто в качестве меры предосторожности).
Важно иметь это как внутренний скрипт для HTML (по крайней мере, из моего тестирования).
Ваш HTML будет выглядеть примерно так (соответствующие части):
<script type="text/javascript">
var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();};
</script>
<script type="text/javascript" src="script.js">
</script>
Из моего тестирования, после очистки кэша и перезагрузки страницы, я получил window.onload
, чтобы каждый раз успешно срабатывать.
Надеюсь, это поможет.