Когда я буду использовать кнопку "Назад" на Firefox для достижения ранее посещаемой страницы, сценарии на той странице не будут работать снова.
Есть ли, кто-либо фиксирует/обходным решение, чтобы иметь сценарии, выполняются снова при просматривании страницы во второй раз?
Обратите внимание на то, что я протестировал те же страницы на Google Chrome и Internet Explorer, и они работают, как предназначено.
Вот файлы и шаги, я раньше тестировал проблему:
(перейдите к 0.html, нажмите для получения до 1.html, кнопка "Назад"),
0.html
<html><body>
<script>
window.onload = function() { alert('window.onload alert'); };
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
1.html
<html><body>
<p>Go BACK!</p>
</body></html>
Установить пустую функцию, которая будет вызываться в window.onunload:
window.onunload = function(){};
например.
<html><body>
<script type="text/javascript">
window.onload = function() { alert('window.onload alert'); };
window.onunload = function(){};
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
Источник: http://www.firefoxanswer.com/firefox/672-firefoxanswer.html (Архивная версия)
Подключить событие «onunload», которое ничего не делает:
<html><body>
<script type="text/javascript">
window.onload = function() { alert('window.onload alert'); };
window.onunload = function(){};
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
Насколько мне известно, Firefox не запускается onLoad
событие сзади.
Он должен запускать onFocus вместо этого на основе этой ссылки здесь .
Когда я использую кнопку «Назад» в 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!');
};