Javascript 单击浏览器';“返回”按钮,Opera浏览器不会在页面上触发JS或服务器端代码(JSP)

Javascript 单击浏览器';“返回”按钮,Opera浏览器不会在页面上触发JS或服务器端代码(JSP),javascript,jsp,browser,opera,back-button,Javascript,Jsp,Browser,Opera,Back Button,我在其他流行浏览器中没有这个问题。在一个JSP页面(我们称之为Page1.JSP)中,我单击一个转到不同页面的表单。当我单击Opera的后退按钮时,它会返回到Page1.jsp,但没有重新刷新JavaScript或jsp代码。比如说, <!-- Inside header tag --> <script language="JavaScript> alert("Does this work in Opera?"); </script> 实际上,大多数浏

我在其他流行浏览器中没有这个问题。在一个JSP页面(我们称之为Page1.JSP)中,我单击一个转到不同页面的表单。当我单击Opera的后退按钮时,它会返回到Page1.jsp,但没有重新刷新JavaScript或jsp代码。比如说,

<!-- Inside header tag -->
<script language="JavaScript>
  alert("Does this work in Opera?");
</script>


实际上,大多数浏览器的行为都是这样的,将浏览器返回到您离开它时的状态 而不是“从头开始”重新加载已访问的页面。这通常是一件好事,使导航更快

“保存状态”的浏览器在卸载时执行此操作,要覆盖它,您可以使用自己的卸载处理程序替换卸载处理程序-

<script>
alert('loaded');

onunload=function(){ return true; }
</script>

警报(“已加载”);
onunload=function(){return true;}

用户可以在浏览器上设置某种自动保存功能,以便在访问之间记住表单的状态。为此,您可能需要在卸载处理程序中将表单字段手动设置为默认值。

@kennebec:非常感谢。因为你的回答,我能够做更多的挖掘,我发现了一个stackoverflow问题和一篇Opera文章,解决了这个问题:

history.navigationMode = "compatible"; // Opera only property
$(document).ready(function() {
  alert("test");
});

根据,navigationMode仅由Opera浏览器支持。因此,这非常有效,我不需要编写任何卸载事件的脚本。我查看了pageshow/pagehide,但它似乎不完全兼容跨浏览器,HTML5也有onpageshow/onpagehide,但我需要跨浏览器投诉并支持传统浏览器。

非常感谢您的帮助。实际上,我将修改这个问题,表单位于frame/iframe中,它位于Page1.jsp中。因此,当用户单击浏览器的后退按钮时,我看到Page1.jsp保持不变,但是frame/iframe的内容被重新加载。这在除Opera之外的所有流行浏览器上都会发生。为我工作!干杯。你能在某处发布一个演示吗(也许是JSFIDLE)?我怀疑这与Opera的iframe安全性有关,但了解您所谈论的内容会有很大帮助。