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

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

     $(document).ready(function() { alert('ready'); }); $(window).load(function() { alert('load'); });    

重现步骤:

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

更新:

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

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

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

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

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

因为它不需要。

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

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

请参阅Firefox中关于Firefox的页面缓存的Ajax,后退按钮和DOM更新以及还原对象类,这些页面缓存存储整个页面状态,并且在大多数情况下不会触发加载事件。 如果你想避免让Firefox保存你的页面状态(这取决于你在页面中的状态),看起来你可以通过注册页面的卸载事件来跳过它。 由于卸载事件可能使页面状态无效,因此如果您有一个页面状态,则Firefox不会缓存页面状态,后退按钮将在后退按钮上新加载页面,并且将触发所有正常加载事件。