Когда я использую кнопку «Назад» в Firefox для доступа к ранее посещенной странице, сценарии на этой странице больше не запускаются.
Это правильно, и это хорошо.
Когда вы нажимаете ссылку в Firefox (и в Safari, и в Opera), она не сразу уничтожает вашу страницу, чтобы перейти на следующую.Он сохраняет страницу нетронутой, просто скрывая ее от просмотра.Если вы нажмете кнопку «Назад», она вернет старую страницу к просмотру, без необходимости снова загружать документ;это намного быстрее, что приводит к более плавному переходу страниц назад / вперед для пользователя.
Эта функция называется bfcache .
Любой контент, добавленный на страницу во времяпредыдущая загрузка пользователя и его использование все еще будут там.Любые обработчики событий, которые вы прикрепили к элементам страницы, все равно будут присоединены.Любые установленные вами тайм-ауты / интервалы будут по-прежнему активны.Так что редко есть какая-то причина, по которой вам нужно знать, что вас спрятали и снова показали.Было бы неправильно снова вызывать onload
или встроенный код скрипта, потому что любое связывание и генерация контента, которые вы выполняли в этой функции, выполнялись бы второй раз над тем же контентом с потенциально катастрофическими результатами.(Например, document.write
во встроенном скрипте полностью уничтожит страницу.)
Причина, по которой запись в window.onunload
приводит к тому, что браузеры, реализующие bfcache, решили, что - для совместимости со страницами, которые действительно делаютнужно знать, когда они удаляются - любая страница, которая объявляет интерес знать, когда происходит onunload
, приведет к отключению bfcache.Эта страница будет загружена заново, когда вы вернетесь к ней, а не будет извлечена из bfcache.
Так что, если вы установите window.onunload= function() {};
, то, что вы на самом деле делаете, это намеренно нарушает работу bfcache.Это приведет к тому, что ваши страницы будут перемещаться медленно, и их не следует использовать, кроме как в крайнем случае.
Если вам нужно знать, когда пользователь покидает вашу страницу или возвращается на нее, не портя bfcacheвместо этого вы можете перехватывать события onpageshow
и onpagehide
:
window.onload=window.onpageshow= function() {
alert('Hello!');
};