window.unbeforeunload показать проблему с div в IE7 - PullRequest
0 голосов
/ 10 марта 2010

В настоящее время я занимаюсь разработкой веб-приложения, для которого я использую значок предварительного загрузчика. Я хочу, чтобы предварительный загрузчик становился видимым каждый раз, когда пользователь переходит на другую страницу или обновляет страницу. Пока у меня есть следующее решение:

window.onbeforeunload = function() { $("applicationdisabler").show(); };

Для Safari и Firefox он отлично работает, когда пользователь щелкает ссылку или обновляет страницу. Однако в IE7 div становится видимым только тогда, когда пользователь нажимает на ссылку, а НЕ когда пользователь обновляет страницу.

Пользователь может обновить страницу, нажав F5 (в Windows) или любым другим возможным способом, предоставленным браузером.

Конечно, я уже искал какие-то обходные пути. Следующий код показывает предупреждение в IE7, но div по-прежнему не виден.

window.onbeforeunload = function() { $("applicationdisabler").show(); alert("come on!"); };

Код моего div:

<div id="applicationdisabler"><img src="images/preloader.gif" /></div>

Надеюсь, кто-нибудь может мне помочь.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Вам нужно поставить # перед идентификатором в селекторе jQuery:

$("#applicationdisabler").show();
0 голосов
/ 10 марта 2010

Почему бы не использовать вместо этого только прослушиватель onLoad? Хотя он будет немного медленнее, он должен быть более надежным.

На самом деле, после небольшого осмотра, я не уверен, что модификация DOM имеет какой-либо смысл, если только обработчик onBeforeUnload не вернет false сначала - то есть заставит пользователя остаться на той же странице.

Насколько я понимаю, событие onBeforeUnload запускается всего за до того, как страница выгружена, поэтому, если вы не вернете false, браузер выгрузит страницу и DOM, и любой выполненный JavaScript после этого будет бессмысленно.

Это не совсем объясняет, почему JavaScript не выполняется должным образом в функции onBeforeUnload, но из того, что я видел, сайты используют только диалоги window.alert или window.prompt для запроса пользователь, если он хочет покинуть сайт, а затем часто выполняет JavaScript, если пользователь решает остаться.

Следовательно, я предполагаю, что некоторые браузеры могут не разрешать манипулирование DOM при запуске этого события - поскольку если страница выгружена, любые манипуляции с DOM абсолютно бессмысленны.

Так что либо:

  1. Верните false в вашем методе onBeforeUnload, а затем покажите ваш предварительный загрузчик (хотя это остановит переход к следующей странице)
  2. Используйте событие onLoad на следующей странице, чтобы вместо этого показать изображение предварительной загрузки

Также обратите внимание: версии Opera 9.5 и ниже не поддерживают это событие (я не уверен насчет более поздних версий), но GMail удается перехватить кнопку возврата в Opera.

Возможно, это это предупреждение безопасности для реализации события onBeforeUnload в IE7 - возможно, Microsoft исправила его таким образом, чтобы предотвратить то, что вы пытаетесь сделать. И я знаю IE6 и ниже не разрешают такие команды, как document.location='' в обработчике onBeforeUnload по соображениям безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...