为什么Firefox 5会忽略document.ready?

Jus*_*ner 4 html firefox jquery

为什么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>
Run Code Online (Sandbox Code Playgroud)

重现步骤:

  1. 点击"提交按钮"
  2. 按返回
  3. document.ready或window.load都没有触发

更新:

这将迫使firefox重新加载页面:

$(window).unload(function() {});
Run Code Online (Sandbox Code Playgroud)

但是,我最终使用了这个:

window.addEventListener('pageshow', function() {alert('pageshow'); }, false);
Run Code Online (Sandbox Code Playgroud)

tho*_*ter 9

为什么Firefox 5.0.1在按下后退按钮时不刷新此页面?

因为它不需要.

当你在Firefox中"返回"并且Firefox可以完全从后退按钮缓冲区加载页面时,那么你要回到的不是一个新页面,而是你之前离开它的确切状态的页面,好像什么都没有介于两者之间,包括所有Javascript代码和变量的状态.就你的脚本(和jQuery)而言,ready()已经被触发了.如果jQuery已经被解雇,jQuery将不会再次触发它.

您可能想要的是收听'pageshow'事件,当从缓冲区重新加载页面时,Firefox会触发该事件,即使其状态已完全保留.