Подтвердить что ты не робот

Window.onload() не стреляет с IE 8 в первом выстреле

Я пытаюсь сделать мои страницы корректными с IE 8, я узнал отсюда: http://www.masykur.web.id/post/How-to-Make-Our-Website-to-be-Ready-for-IE8.aspx что моя страница должна быть совместимой с XHTML 1.0 и atleast CSS 2.1, я сделал мою страницу и CSS совместимыми только с несколькими предупреждениями, но все же window.onload() не стреляет. Кто-нибудь столкнулся с этой проблемой?

вот фрагмент кода:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=8"/>
        <title>Testing</title>
        <link rel="stylesheet" href="test.css" type="text/css"></link>
        <script type="text/javascript" src="login.js"></script>
        <script type="text/javascript" src="common.js"></script>
        <script type="text/javascript">
            window.onload = function()
            {
                          // Not coming here at all on first shot   
            }
        </script>
    </head>
    <body>
     .
     .
     .

Однако обновление страницы, похоже, заставляет ее работать.

Я что-то пропустил?

UPDATE:

Одна из IE-аддонов создала эту проблему после отключения ее работы. Спасибо за ваше время и ответы:)

4b9b3361

Ответ 1

Для IE try:

window.onload = new function() { alert('hello');};

Ответ 2

Это довольно старый поток, но я нашел решение, которое могло бы помочь другим.

Я добавлял функцию к window.onload через динамически введенный script (действительно, чтобы имитировать внешнюю нагрузку script по причинам, которые не важны в этом контексте). Как указано в этом сообщении, при первом загрузке в IE8, window.onload не срабатывает, но все последующие вызовы будут.

Я узнал, что если я помещу это в HTML файл как внутренний script, он будет работать каждый раз:

var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };

Все приведенное выше код выполняет "инициализирует" IE8 window.onload ненавязчиво. Я подозреваю, что IE8 не запускает window.onload в первый раз, если он вызывается из внешнего script, поскольку событие onload еще не подключено к окну (или в технических терминах его тип undefined). Похоже, что в первый раз, что делает IE8: добавив onload в окно, не выполнив его правильно.

Приведенный выше код становится совершенно очевидным: мы просто заставляем IE8 распознавать событие onload. Нам все равно, что будет выполнено, а что нет, поэтому мы просто проконсультируем вас через любой существующий код window.onload, который уже определен (как предосторожность).

Важно иметь это как внутренний script для 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, чтобы успешно запускать каждый раз.

Надеюсь, это поможет.

Ответ 3

У вас может быть ошибка в JavaScript, если это произойдет, любой JavaScript после этого будет работать неправильно.

Попробуйте удалить ссылку на login.js и common.js и попробуйте оповещение в вашей проблемной функции.

Ответ 4

У меня нет IE8 для личного тестирования, но что делает этот тест?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test IE 8</title>
<script type="text/javascript">
/* <![CDATA[ */
window.onload = function(){alert('Good morning!');}
/* ]]> */
</script>
</head>
<body>
<h1>Hello</h1>
<body>
</html>

Если этот тест работает так, как ожидалось, попробуйте бит CDATA вокруг вашего внутреннего блока JavaScript.

И тогда, если это не работает должным образом, возможно, что-то есть во внешнем JavaScript выше, что предотвращает запуск onload. Об этом говорил предыдущий плакат. В этот момент попробуйте консоль или отладчик ошибок указать путь.

Ответ 5

onload запускается после загрузки вашего контента (включая внешние изображения и т.д.). Возможно, эти ресурсы занимают много времени для загрузки с первого раза (до их кэширования). Другая возможность - это ошибка в коде, которая влияет только на IE, так как останавливает ваши скрипты (но только в первый раз нечетно).

Ответ 6

Если вы получаете разные результаты с использованием Apache и другого веб-сервера (IIS?) и сравниваете конечный результат с использованием IE8, то различие должно быть в отправляемом заголовке типа контента. Получите утилиту wget для своей платформы и посмотрите заголовки, которые создаются. Если вы находитесь в Windows, то Portable Apps версия GUI wget довольно хороша.

Ответ 7

Следующий код работает для меня. Когда я загружаю страницу в Firefox, я вижу предупреждение мгновенно. Когда я впервые загружаю страницу в IE 8, она предупреждает меня об активном содержимом. Если я разрешаю заблокированное содержимое, он просит меня подтвердить, что я и делаю. Затем появляется предупреждение. Если это не работает для вас, попробуйте IE 8 на другом компьютере или начните исключать код на своей странице, чтобы проверить наличие ошибок. Вы можете выполнить двоичный поиск: закомментируйте первую половину страницы и посмотрите, появится ли предупреждение; если он по-прежнему нет, то разорвать первый тайм и прокомментировать вторую половину. Повторяйте по мере необходимости, пока вы не сузили его до нарушающего кода. Кстати, вам не нужен XHTML для соответствия IE8. HTML отлично работает и на самом деле имеет некоторые преимущества.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    window.onload=function() { alert('hello');};
    </script>
  </head>
  <body>
  </body>
</html>

Ответ 8

Я знаю, что это старый вопрос, но я просто столкнулся с тем же.

 window.onload=function() { alert('hello');};

обрабатывается иначе, чем

 window.onload= new function() { alert('hello');};

Ключевое слово здесь new.

My JS прекращался всякий раз, когда он доходил до (onload =), до тех пор, пока я не добавил слово "новое" перед "функцией". Несмотря на то, что он отлично работал без "нового" в моем локальном хосте, но как только я помещаю его онлайн, он не работает, пока я не добавлю "новый".

Ответ 9

Старый вопрос, но у меня была такая же проблема, но это оказалось другой проблемой. Моя проблема заключалась в том, что я сделал <script type="application/javascript">, который <IE9 не понимает и не пытается работать даже. Для работы в старых браузерах вам все равно придется использовать text/javascript, хотя это не является технически правильным типом...