我发现的问题与this question非常相似,只是台式机上的Safari似乎已经解决了这个问题。基本上,问题是:当客户端浏览移动版Safari并且页面在pagea.html上执行javascript函数时,然后导航到pageb.html,然后按后退按钮返回pagea.html,javascript函数当客户端按下后退按钮返回pagea.html时,将不会运行。它将跳过javascript调用。
我已尝试过上面链接中提到的解决方案,但似乎没有什么适用于移动版Safari。还有其他人遇到过这个bug吗?你是怎么处理的?
答案 0 :(得分:88)
这是由back-forward cache引起的。当用户导航时,它应该保存完整的页面状态。当用户使用后退按钮页面导航时,可以非常快速地从缓存加载。这与仅缓存HTML代码的普通缓存不同。
为bfcache onload
加载页面时,不会触发事件。相反,您可以检查persisted
事件的onpageshow
属性。初始页面加载时设置为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() { });