Когда я использую кнопку «Назад» в 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!');
};