移动Safari后退button

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

我已经尝试了上面的链接中提到的解决scheme,但似乎没有任何工作的移动Safari。 有没有人遇到过这个bug? 你是怎么处理的呢?

这是由后退caching引起的。 当用户导航时,应该保存完整的页面状态。 当用户导航返回button页面可以很快从caching加载。 这与仅cachingHTML代码的普通caching不同。

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

 window.onpageshow = function(event) { if (event.persisted) { alert("From back / forward cache."); } }; 

出于某种原因,jQuery在事件中没有这个属性。 你可以从原始事件中find它。

 $(window).bind("pageshow", function(event) { if (event.originalEvent.persisted) { alert("From back / forward cache."); } }); 

快速解决这些问题的方法是在按下返回button时重新加载页面。 但是,这会使后退/前进caching所带来的积极效果无效。

 window.onpageshow = function(event) { if (event.persisted) { window.location.reload() } }; 

作为一个旁注,你可以看到很多使用空onunload处理程序的页面作为解决scheme。 这从iOS5以来一直没有工作。

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