移动Safari浏览器的后退按钮[复制](Mobile Safari back button [du

2019-06-17 18:22发布

这个问题已经在这里有一个答案:

  • 从缓存中防止野生动物园装载时后退按钮被点击 6个回答

我发现这个问题是非常相似的这个问题 ,不同的是Safari浏览器在桌面上似乎已经解决了这个问题。 从本质上讲,这个问题是这样的:当客户端浏览的移动Safari浏览器和网页上执行pageA.html中的JavaScript函数,然后导航到pageb.html,然后按返回键回到pageA.html中,JavaScript函数当客户端按后退按钮回来将pageA.html将无法运行。 它会跳过javascript调用。

我试着在上面的链接中提到的解决方案,但似乎没有任何的移动Safari浏览器工作。 有没有其他人遇到这个错误吗? 你是怎么处理的呢?

Answer 1:

这是造成后面向前缓存 。 据推测,当用户导航离开保存页面的完整状态。 当用户返回与后退按钮页面可以从缓存中非常迅速地加载。 这是正常的缓存只缓存的HTML代码不同。

当页面加载bfcache onload事件不会被触发。 相反,你可以检查persisted的财产onpageshow事件。 它被设置为在初始页面加载错误。 当页从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() { });


文章来源: Mobile Safari back button [duplicate]