После перемещения назад в истории 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>
77
задан Volker E. 12 March 2016 в 08:47
поделиться

4 ответа

Установить пустую функцию, которая будет вызываться в 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 (Архивная версия)

86
ответ дан 24 November 2019 в 10:51
поделиться

Подключить событие «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>
1
ответ дан 24 November 2019 в 10:51
поделиться

Насколько мне известно, Firefox не запускается onLoad событие сзади.

Он должен запускать onFocus вместо этого на основе этой ссылки здесь .

1
ответ дан 24 November 2019 в 10:51
поделиться

Когда я использую кнопку «Назад» в 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!');
};
72
ответ дан 24 November 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: