Safari后退按钮问题
我为当地社区大学做一些次要的编程和网络工作。这项工作包括维护一个非常庞大且破坏人心的网站,该网站由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