Javascript 移动Safari后退按钮

Javascript 移动Safari后退按钮,javascript,safari,Javascript,Safari,我发现的问题与之非常相似,只是桌面上的Safari似乎已经解决了这个问题。本质上,问题在于:当客户端在mobile safari上浏览时,页面在pageA.html上执行javascript函数,然后导航到pageB.html,然后按后退按钮返回pageA.html,当客户端按下后退按钮返回到pageA.html时,javascript函数将不会运行。它将跳过javascript调用 我已经尝试了上面链接中提到的解决方案,但似乎对mobile Safari没有任何效果。还有其他人遇到过这个错误吗

我发现的问题与之非常相似,只是桌面上的Safari似乎已经解决了这个问题。本质上,问题在于:当客户端在mobile safari上浏览时,页面在
pageA.html
上执行javascript函数,然后导航到
pageB.html
,然后按后退按钮返回
pageA.html
,当客户端按下后退按钮返回到
pageA.html
时,javascript函数将不会运行。它将跳过javascript调用

我已经尝试了上面链接中提到的解决方案,但似乎对mobile Safari没有任何效果。还有其他人遇到过这个错误吗?您是如何处理的?

这是由以下原因造成的。它应该在用户离开时保存页面的完整状态。当用户使用后退按钮返回时,页面可以很快从缓存加载。这与只缓存HTML代码的普通缓存不同

为bfcache
onload加载页面时,不会触发事件。相反,您可以检查
onpageshow
事件的
persistend
属性。在初始页面加载时设置为false。当页面从bfcache加载时,它被设置为true

window.onpageshow = function(event) {
    if (event.persisted) {
        alert("From back / forward cache.");
    }
};
由于某些原因,jQuery在事件中没有此属性。您可以从原始事件中找到它

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
      alert("From back / forward cache.");
    }
});
这些问题的快速解决方法是在按下“后退”按钮时重新加载页面。但是,这会抵消前向/后向缓存带来的任何积极影响

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};
作为旁注,您可以看到许多页面使用空
onunload
处理程序作为解决方案。这在iOS5之后就不起作用了

$(window).bind("unload", function() { });

如果
尚未出现,您可能希望尝试将所有链接URL附加到
。e、 g.:
href=“next.html”
变成
href=“next.html?”
。这将向web浏览器提示页面内容是动态的,再次转到该页面应再次从服务器重新加载页面。这也应该应用于外部脚本。e、 g.:
src=“mylib.js”
been
src=“mylib.js?”
。应该注意的是,这个解决方案不再适用于当前版本的iOS(我相信我在哪里读到过,它超出了5ish)。pageshow事件将在第一次后退/前进时触发,在该页面历史记录状态下将不再触发。除此之外,我发现的唯一可行的解决方案是利用popstate事件来标识back/forward。上面的答案适用于iOS6。不过,我对iOS7不太清楚。稍后将进行测试。这在iOS7上工作,但如果屏幕关闭后再次打开,也会产生刷新页面的副作用。有什么办法解决这个问题吗?很抱歉,这对我在OSX和Safari上不起作用。event.persisted始终为false。我做错什么了吗?据我所知,这在现代浏览器中不起作用。将代码插入
console.log()
alert()
事件中。保留的
值始终返回false。在Windows上的FF 54和Chrome 59中测试,在iOS 10.3.2上的Safari中测试-在任何情况下都不起作用。