Ответ 1
Для IE try:
window.onload = new function() { alert('hello');};
Я пытаюсь сделать мои страницы корректными с 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-аддонов создала эту проблему после отключения ее работы. Спасибо за ваше время и ответы:)
Для IE try:
window.onload = new function() { alert('hello');};
Это довольно старый поток, но я нашел решение, которое могло бы помочь другим.
Я добавлял функцию к 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
, чтобы успешно запускать каждый раз.
Надеюсь, это поможет.
У вас может быть ошибка в JavaScript, если это произойдет, любой JavaScript после этого будет работать неправильно.
Попробуйте удалить ссылку на login.js и common.js и попробуйте оповещение в вашей проблемной функции.
У меня нет 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. Об этом говорил предыдущий плакат. В этот момент попробуйте консоль или отладчик ошибок указать путь.
onload запускается после загрузки вашего контента (включая внешние изображения и т.д.). Возможно, эти ресурсы занимают много времени для загрузки с первого раза (до их кэширования). Другая возможность - это ошибка в коде, которая влияет только на IE, так как останавливает ваши скрипты (но только в первый раз нечетно).
Если вы получаете разные результаты с использованием Apache и другого веб-сервера (IIS?) и сравниваете конечный результат с использованием IE8, то различие должно быть в отправляемом заголовке типа контента. Получите утилиту wget для своей платформы и посмотрите заголовки, которые создаются. Если вы находитесь в Windows, то Portable Apps версия GUI wget довольно хороша.
Следующий код работает для меня. Когда я загружаю страницу в 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>
Я знаю, что это старый вопрос, но я просто столкнулся с тем же.
window.onload=function() { alert('hello');};
обрабатывается иначе, чем
window.onload= new function() { alert('hello');};
Ключевое слово здесь new
.
My JS прекращался всякий раз, когда он доходил до (onload =), до тех пор, пока я не добавил слово "новое" перед "функцией". Несмотря на то, что он отлично работал без "нового" в моем локальном хосте, но как только я помещаю его онлайн, он не работает, пока я не добавлю "новый".
Старый вопрос, но у меня была такая же проблема, но это оказалось другой проблемой. Моя проблема заключалась в том, что я сделал <script type="application/javascript">
, который <IE9
не понимает и не пытается работать даже. Для работы в старых браузерах вам все равно придется использовать text/javascript
, хотя это не является технически правильным типом...