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 已缓存,但 frame/iframe 会重新加载。这发生在除 Opera 之外的所有流行浏览器中。

4

2 回答 2

3

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

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

<script>
alert('loaded');

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

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

于 2012-04-12T14:46:08.580 回答
1

@kennebec:非常感谢。由于您的回答,我能够做更多的挖掘工作,我在这里找到了一个 stackoverflow 问题和一篇 Opera 文章它解决了这个问题:

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

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

于 2012-04-12T16:20:30.230 回答