Как определить, находится ли браузер в процессе загрузки новой страницы - PullRequest
5 голосов
/ 22 февраля 2012

У меня есть веб-приложение с некоторым кодом безопасности, который вызывает перезагрузку страницы, если соединение с сервером (Socket.IO) отключается дольше 5 секунд (обычно это проблемы с брандмауэром / сломанным прокси на сайте клиента).

Соединение Socket.IO прекращается, как только начинается загрузка новой страницы, но код безопасности этого не видит.Переход на медленную страницу приводит к срабатыванию кода безопасности и переходу на предыдущую страницу.

Мне нужно иметь возможность сказать (непосредственно перед тем, как этот код вызывает перезагрузку), ожидает ли браузер загрузки новой (медленной) страницы.

Какие существуют подходы к выполнениюэто, кроме размещения события jQuery click для каждой ссылки (которая не будет перехватывать навигацию через адресную строку)?

Спасибо,

Крис.

Ответы [ 2 ]

13 голосов
/ 22 февраля 2012

Мониторинг window.onbeforeunload сделает свое дело.Срабатывает сразу после того, как пользователь начинает навигацию.

Попробуйте ввести это в консоли Chrome на любой странице и нажмите на любую ссылку:

window.onbeforeunload = function () { console.log("oh noes"); }
2 голосов
/ 22 февраля 2012

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

Редактировать
Я полагаю, вы могли бы просто установить переменную, такую ​​как isReloading, когда страница перезагрузится. Вам также необходимо отслеживать onbeforeunload и проверять, что происходит в первую очередь: отключение или событие разгрузки. Если отключение происходит первым, вы отключаетесь. Запустите флаг isReloading и перезагрузите. В onbeforeunload проверьте, был ли установлен флаг. Обратитесь к концепции проверки загрузки медленной страницы: проверьте, перезагружаете ли вы.

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