Safari后退按钮问题

时间:2020-03-05 18:42:22  来源:igfitidea点击:

我为当地社区大学做一些次要的编程和网络工作。这项工作包括维护一个非常庞大且破坏人心的网站,该网站由VBScript,javascript,Dreamweaver生成的碎片和一系列附件组成,这些附件多年来被各种conmen诱使他们购买。

几天前,我接到了一个电话:"该网站已锁定使用Safari的用户!"好的,第一步下载Safari(v3.1.2),第二步浏览到该站点。一切似乎都正常。

长话短说,我终于找到了问题所在,这与Safari的后退按钮有关。该网站使用花哨的javascript菜单,该菜单可在我尝试过的所有浏览器(包括Safari)中都可以使用,这是第一次。但是在Safari中,如果我们点击页面上的链接,然后按返回按钮,则菜单将不再起作用。

我制作了一个简短的网页以说明该原理。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Safari Back Button Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body onload="alert('Hello');">
<a href="http://www.codinghorror.com">Coding Horror</a>
</body>
</html>

加载页面,我们将看到警报框。然后点击页面外的链接,然后点击"后退"按钮。在IE和Firefox中,我们会再次看到警报框,而在Safari中,我们不会。

经过激烈的谷歌搜索,我发现了其他人也遇到了类似的问题,但没有真正令人满意的答案。所以我的问题是,在用户单击后退按钮后,如何使其页面在Safari中的工作方式与在其他浏览器中相同?

如果这是一个愚蠢的问题,请保持温柔,javascript对我来说有点新。

解决方案

回答

我不知道是什么引起了问题,但我知道谁可以为我们提供帮助。 Safari是基于Webkit构建的,而缺少Apple(不是那么注重社区的苹果)的人,Webkit团队可能知道问题所在。

这根本不是一个愚蠢的问题。

回答

我注意到非常相似的东西。我认为这是因为Firefox和IE在返回时再次从服务器检索页面,而Safari却没有。我们是否尝试过添加页面过期/没有缓存头?当我发现这种行为但还没有时间时,我打算进行调查。

回答

iframe解决了以下问题:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Safari Back Button Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body onload="alert('Hello');">
<a href="http://www.codinghorror.com">Coding Horror</a>
<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">
this prevents back forward cache
</iframe>
</body>
</html>

更多细节

回答

Stefan的iframe解决方案有效,但如果不够优雅,我发现以下JavaScript也可以解决该问题:

window.onunload = function(){};

也就是说,如果菜单是JavaScript,那么我们可能也希望使用JavaScript解决此问题。

卸载事件处理程序定义的想法来自以下Firefox 1.5文章:https://developer.mozilla.org/en/Using_Firefox_1.5_caching。

回答

我知道这个线程已经使用了一年,但是我只是使用ProjectSeven的Safari后退按钮修复了一个仅用于Safari的相同问题。奇迹般有效。

http://www.projectseven.com/extensions/info/safaribbfix/index.htm