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

时间:2011-07-25 04:56:46

标签: jquery html firefox

为什么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都没有激活
  4. 更新

    这将强制firefox重新加载页面:

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

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

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

2 个答案:

答案 0 :(得分:9)

  

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

因为它不需要。

当你在Firefox中“返回”并且Firefox可以完全从后面的按钮缓冲区加载页面时,那么你要回到的不是一个新的页面,而是你之前留下的确切状态的页面如果之间没有发生任何事情,那就包括所有Javascript代码和变量的状态。就你的脚本(和jQuery)而言,ready()已经被触发了。如果它已被解雇,jQuery将不会再次触发它。

你可能想要的是listen to the 'pageshow' event,当从缓冲区重新加载页面时Firefox会触发,即使它的状态被完全保留。

答案 1 :(得分:1)

请参阅Ajax, back button and DOM updatesRestore object classes on back button in Firefox,了解Firefox的页面缓存,它存储整个页面状态,并且在大多数情况下不会触发加载事件。如果你想避免让Firefox保存你的页面状态(这取决于你在页面中的状态),看起来你可以通过注册页面的卸载事件来跳过它。因为卸载事件可能使页面状态无效,所以如果你有一个页面状态,Firefox不会缓存页面状态,后退按钮会在后退按钮上新加载页面,所有正常加载事件都会触发。