Mobile Safari后退按钮

时间:2012-08-16 00:32:30

标签: javascript safari

我发现的问题与this question非常相似,只是台式机上的Safari似乎已经解决了这个问题。基本上,问题是:当客户端浏览移动版Safari并且页面在pagea.html上执行javascript函数时,然后导航到pageb.html,然后按后退按钮返回pagea.html,javascript函数当客户端按下后退按钮返回pagea.html时,将不会运行。它将跳过javascript调用。

我已尝试过上面链接中提到的解决方案,但似乎没有什么适用于移动版Safari。还有其他人遇到过这个bug吗?你是怎么处理的?

1 个答案:

答案 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() { });