Почему Firefox 5 игнорирует document.ready? - PullRequest
4 голосов
/ 25 июля 2011

Почему Firefox 5.0.1 не обновляет эту страницу при нажатии кнопки «Назад»?

<html>
<head>
  <meta http-equiv="cache-control" content="no-cache">
  <script src="http://code.jquery.com/jquery-1.6.2.min.js" type="text/javascript"></script>   
  <script>
  $(document).ready(function() { alert('ready'); });
  $(window).load(function() { alert('load'); });
  </script>
</head>
<body>
  <form action="http://www.google.com" method="get">
  <input name="q" type="text"> 
  <input type="submit">
  </form>
</body>
</html>

Шаги для воспроизведения:

  1. Нажмите кнопку «Отправить»
  2. Нажмите Назад
  3. Ни document.ready, ни window.load не запускаются

Обновление:

Это заставит firefox перезагрузить страницу:

$(window).unload(function() {});

Но в итоге я использовал это:

window.addEventListener('pageshow', function() {alert('pageshow'); }, false);

Ответы [ 2 ]

9 голосов
/ 25 июля 2011

Почему Firefox 5.0.1 не обновляет эту страницу при нажатии кнопки «Назад»?

Потому что это не нужно.

Когда вы переходите «назад» в Firefox, и Firefox может загружать страницу целиком из буфера кнопки «назад», тогда вы возвращаетесь не к новой странице, а к странице в том состоянии, в котором вы ее оставили до если ничего не произошло между ними, и это включает в себя состояние всего вашего кода Javascript и переменных. Что касается вашего скрипта (и jQuery), то ready () уже запущен. JQuery не будет запускать его во второй раз, если он уже запущен.

Что вам, вероятно, нужно, это прослушать событие 'pageshow' , которое запускается Firefox при повторной загрузке страницы из буфера, даже если ее состояние полностью сохраняется.

1 голос
/ 25 июля 2011

См. Ajax, кнопка "Назад" и обновления DOM и Восстановление классов объектов на кнопке "Назад" в Firefox о кеше страницы Firefox, который хранит все состояние страницы и не вызывает события загрузки в большинстве случаев. Если вы не хотите, чтобы Firefox сохранял состояние вашей страницы (которое зависит от того, какое у вас состояние на странице), похоже, вы можете пропустить его, зарегистрировав событие unload для страницы. Поскольку событие unload может сделать недействительным состояние страницы, Firefox не кэширует состояние страницы, если оно у вас есть, и кнопка «Назад» загрузит страницу заново с помощью кнопки «Назад» и сработают все обычные события загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...