2012-04-12 127 views
3

我在其他流行的浏览器中没有这个问题。在一个JSP页面(我们称之为Page1.jsp)中,我单击了一个表单,它将转到另一个页面。当我点击Opera的后退按钮时,它会回到Page1.jsp,但没有JavaScript或JSP代码已经被刷新。例如,点击浏览器后退按钮后,Opera浏览器不会触发JS或服务器端代码(JSP)

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

简单警报声明不会触发。服务器端代码也是如此。但是,其他流行的桌面浏览器没有问题。

我该如何解决这个问题?

谢谢你的帮助。

更新

我应该说 - 我为此道歉 - 这包含的Page1.jsp帧/ iframe中,这是在提交表单的生活。当用户提交表单时,它会在框架/ iframe中加载一个新页面。此时,当用户单击浏览器的后退按钮时,我看到Page1.jsp已被缓存,但帧/ iframe会重新加载。这发生在除Opera之外的所有流行浏览器中。

+0

你可以发布演示某处(JSFiddle也许)?我怀疑它与Opera的iframe安全性有关,但它可以帮助你查看你在说什么。 – webinista 2012-04-18 21:00:14

回答

1

@kennebec:非常感谢。因为你的答案,我可以做一些更多的挖掘,我发现了一个计算器问题here和歌剧文章here,既解决了问题:

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

this site,navigationMode仅由Opera浏览器的支持。所以,这是完美的作品,我不必脚本任何卸载事件。我查找了pageshow/pagehide,但它看起来并不完全符合跨浏览器的兼容性,HTML5有onpageshow/onpagehide,但我需要成为跨浏览器的投诉并支持传统浏览器。

3

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

这是保存状态“上卸载这样做的浏览器,来覆盖它,你可以用一个取代卸载处理您的own-

<script> 
alert('loaded'); 

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

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

+0

非常感谢您的帮助。实际上,我将修改问题,表单位于Page1.jsp中的frame/iframe中。所以,当用户点击浏览器的后退按钮时,我看到Page1.jsp保持不变,但是frame/iframe的内容被重新加载。这发生在除Opera之外的所有流行浏览器上。 – user717236 2012-04-12 14:49:30

+0

为我工作!干杯。 – 2013-11-21 14:18:25