点击浏览器的后退按钮后,Opera浏览器不会在页面上触发JS或服务器端代码(JSP)。

3

在其他流行的浏览器中,我没有遇到这个问题。在一个JSP页面(我们称之为Page1.jsp)中,我点击一个表单,跳转到另一个页面。当我点击Opera浏览器的后退按钮时,它会回到Page1.jsp页面,但没有JavaScript或JSP代码被重新执行。例如:

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

简单的警告语句不起作用。 服务器端代码也是如此。 但其他流行的桌面浏览器没有问题。
我该如何解决这个问题?
非常感谢您的帮助。
更新
我应该说明一下,真诚地道歉,Page1.jsp 包含一个框架/iframe,其中包含提交表单。 当用户提交表单时,它将在框架/iframe内加载新页面。 在这一点上,当用户单击浏览器的后退按钮时,我看到 Page1.jsp 被缓存,但框架/iframe 重新加载。 这发生在所有流行的浏览器中,除了 Opera。

你能否在某个地方发布一个演示(例如JSFiddle)?我怀疑这与Opera的iframe安全有关,但看到你所说的内容会非常有帮助。 - webinista
2个回答

3
实际上,大多数浏览器都是这样工作的,将浏览器返回到你离开它的状态,而不是从头重新加载已访问的页面。这通常是一件好事,可以使导航更快。
那些“保存状态”的浏览器会在卸载时保存状态,如果要覆盖它,可以用自己的卸载处理程序替换它。
<script>
alert('loaded');

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

有可能用户在浏览器上设置了某种自动保存选项,以便记住表单状态,这时您可能需要在卸载处理程序中手动将表单字段设置为它们的默认值。


非常感谢您的帮助。 实际上,我将修改问题,表单位于框架/iframe中,该框架/iframe位于Page1.jsp内部。 因此,当用户单击浏览器的后退按钮时,我发现Page1.jsp保持不变,但是框架/iframe的内容会重新加载。 除Opera之外的所有流行浏览器都会发生这种情况。 - user717236
对我有用!干杯。 - Umber Ferrule

1

@kennebec:非常感谢您。由于您的回答,我能够进行更深入的挖掘,并找到了一个stackoverflow问题这里和一篇Opera文章这里,解决了这个问题:

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

根据此网站的说法,navigationMode仅受Opera浏览器支持。 因此,这个页面可以完美地工作,而我不必编写任何卸载事件脚本。 我查找了pageshow/pagehide,但似乎没有完全符合跨浏览器兼容性,而HTML5具有onpageshow/onpagehide,但我需要跨浏览器兼容并支持旧版浏览器。

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