【问题标题】:After clicking browser's back button, Opera browser does not fire JS or Server-side code (JSP) on page单击浏览器的后退按钮后,Opera 浏览器不会触发页面上的 JS 或服务器端代码 (JSP)
【发布时间】:2012-04-24 22:11:23
【问题描述】:

我在其他流行的浏览器中没有这个问题。在一个 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 已缓存,但 frame/iframe 会重新加载。除了 Opera,所有流行的浏览器都会出现这种情况。

【问题讨论】:

  • 你能在某个地方发布一个演示(也许是JSFiddle)吗?我怀疑这与 Opera 的 iframe 安全性有关,但看看你在说什么会很有帮助。

标签: javascript jsp browser opera back-button


【解决方案1】:

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

“保存状态”的浏览器在卸载时会这样做,要覆盖它,您可以将卸载处理程序替换为您自己的处理程序之一-

<script>
alert('loaded');

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

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

【讨论】:

  • 非常感谢您的帮助。实际上,我将修改问题,表单位于 Page1.jsp 内部的框架/iframe 中。因此,当用户单击浏览器的后退按钮时,我看到 Page1.jsp 保持不变,但重新加载了 frame/iframe 的内容。这发生在除 Opera 之外的所有流行浏览器上。
  • 为我工作!干杯。
【解决方案2】:

@kennebec:非常感谢。由于您的回答,我得以进行更多挖掘,并找到了一个 stackoverflow 问题 here 和一篇 Opera 文章 here,它们解决了这个问题:

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

根据this site,navigationMode 仅支持 Opera 浏览器。所以,这很完美,我不必编写任何卸载事件的脚本。我查了pageshow/pagehide,但它似乎不完全兼容跨浏览器,HTML5有onpageshow/onpagehide,但我需要跨浏览器投诉并支持旧版浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2013-03-02
    • 1970-01-01
    • 2019-03-31
    • 2011-05-20
    相关资源
    最近更新 更多