在Firefox中点击后退按钮时,重新加载页面

5
我有一个页面,可以将整个页面动画移出视图,作为过渡效果。它工作得很好,但是当用户在浏览器中点击后退按钮时,Firefox会从历史记录中带回缓存的页面,该页面没有body。
因此,我可以通过重新加载被后退访问的页面来解决这个问题。
我尝试了以下代码,以便避免重复加载:
<script type="text/javascript">
  window.onload=function(){
    var e=document.getElementById("refreshed");
    if(e.value=="no")e.value="yes";
    else{e.value="no";location.reload();}
  }
</script>
<input type="hidden" id="refreshed" value="no">

由于匿名函数没有被调用,因此它并没有解决问题。

因此,我尝试设置标头,以便浏览器不缓存页面。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

这并没有解决问题。

在Chrome中,该页面运行良好。

我使用的Firefox版本是12.0。

我该如何使用Javascript、JQuery或其他客户端脚本重新加载页面?


我认为这在Chrome中也不起作用,该值始终为“no”。 - Sully
在Chrome中,匿名函数被调用且页面不会重新加载。但是由于页面没有被缓存,所以这并不重要。我的问题是,在Firefox中,该函数甚至都没有被调用。 - mahesmohan
2个回答

5

当返回到一个内存缓存页面时,没有触发onload事件。

我认为您有三个主要选项:

  1. 使用onpageshow事件(在导航到缓存页面时会触发)。
  2. 通过添加unload事件监听器来防止页面被内存缓存(这可以是一个空函数)。
  3. 不要进行烦人的unload动画。

虽然我也讨厌这个烦人的卸载动画,但是我的客户特别要求加上它。非常感谢,Boris。 - mahesmohan
啊,是的。客户有点让人头疼。;) - Boris Zbarsky
+1. "通过添加卸载事件监听器来防止页面的内存缓存",这个方法非常有效。这里有一些文档 - Qtax

0

我没有尝试过,但是setTimeout可能会有帮助。

<script>
setTimeout(function() {
var e=document.getElementById("refreshed");
    if(e.value=="no")e.value="yes";
    else{e.value="no";location.reload();}
}, 1000);
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接