Javascript 移动Safari后退按钮
我发现的问题与之非常相似,只是桌面上的Safari似乎已经解决了这个问题。本质上,问题在于:当客户端在mobile safari上浏览时,页面在Javascript 移动Safari后退按钮,javascript,safari,Javascript,Safari,我发现的问题与之非常相似,只是桌面上的Safari似乎已经解决了这个问题。本质上,问题在于:当客户端在mobile safari上浏览时,页面在pageA.html上执行javascript函数,然后导航到pageB.html,然后按后退按钮返回pageA.html,当客户端按下后退按钮返回到pageA.html时,javascript函数将不会运行。它将跳过javascript调用 我已经尝试了上面链接中提到的解决方案,但似乎对mobile Safari没有任何效果。还有其他人遇到过这个错误吗
pageA.html
上执行javascript函数,然后导航到pageB.html
,然后按后退按钮返回pageA.html
,当客户端按下后退按钮返回到pageA.html
时,javascript函数将不会运行。它将跳过javascript调用
我已经尝试了上面链接中提到的解决方案,但似乎对mobile Safari没有任何效果。还有其他人遇到过这个错误吗?您是如何处理的?这是由以下原因造成的。它应该在用户离开时保存页面的完整状态。当用户使用后退按钮返回时,页面可以很快从缓存加载。这与只缓存HTML代码的普通缓存不同
为bfcacheonload加载页面时,不会触发事件。相反,您可以检查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”
beensrc=“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中测试-在任何情况下都不起作用。