После возвращения в историю Firefox JavaScript не будет работать
когда я использую кнопку "Назад" в 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>
7 ответов
установите пустую функцию для вызова в 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(Архивная Версия)
когда я использую кнопку "Назад" в 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!');
};
вы можете проверить 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>
насколько я знаю, Firefox не срабатывает onLoad
событие на спине.
он должен запускать onFocus вместо этого на основе этой ссылки здесь.
простой способ заставить страницу выполнять JavaScript, когда пользователь переходит к ней с помощью истории браузера, - это событие OnPopState. Мы используем это, чтобы приостановить и воспроизвести видео на нашей домашней странице (https://fynydd.com).
window.onpopstate = function() {
// Do stuff here...
};
для некоторых случаев, таких как ajax operations url change listener можно использовать
$(window).on('hashchange', function() {
....
});