Когда я использую кнопку «Назад» в 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>
javascript
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!'); };
источник
document.ready
будет работать по сути так же, какwindow.onload
(для некоторых браузеров они все равно являются одним и тем же событием).Вы можете проверить
persisted
свойствоpageshow
события. При начальной загрузке страницы установлено значение false. Когда страница загружается из кеша, ей присваивается значение true.window.onpageshow = function(event) { if (event.persisted) { alert("From bfcache"); } };
По какой-то причине jQuery не имеет этого свойства в событии. Вы можете найти его в оригинальном событии.
$(window).bind("pageshow", function(event) { if (event.originalEvent.persisted) { alert("From bfcache"); } });
источник
Подключитесь к событию 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>
источник
onpopstate
, когда этот вопрос был задан почти пять лет назад, это событие было все еще относительно новым, а поддержка браузерами была очень непоследовательнойНасколько я знаю, Firefox не запускает
onLoad
событие на спине.Вместо этого он должен запускать onFocus на основе этой ссылки здесь .
источник
Простой способ заставить страницу выполнять JavaScript, когда пользователь возвращается к ней с помощью истории браузера, - это событие OnPopState. Мы используем это, чтобы приостановить и воспроизвести видео на нашей домашней странице ( https://fynydd.com ).
window.onpopstate = function() { // Do stuff here... };
источник
для некоторых случаев, таких как прослушиватель изменения URL-адреса операций ajax, может использоваться
$(window).on('hashchange', function() { .... });
источник