,问题是这样的:当客户端在移动浏览器上浏览并且页面在pagea.html上执行javascript函数,然后导航到pageb.html,然后按返回按钮返回到javascript函数pagea.html。客户端按返回按钮返回pagea.html时将无法运行。它将跳过javascript调用。
我已经尝试了上面链接中提到的解决方案,但似乎不适用于移动Safari。还有其他人遇到此错误吗?你是怎么处理的呢?
这是由后退缓存引起的。当用户离开时应该保存页面的完整状态。当用户使用后退按钮导航时,可以非常快地从缓存中加载页面。这与仅缓存HTML代码的普通缓存不同。
为bfcache加载页面时,onload不会触发事件。相反,您可以检查事件的persisted属性onpageshow。初始页面加载时将其设置为false。从bfcache加载页面时,将其设置为true。
onload
persisted
onpageshow
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起,此方法无效。
onunload
$(window).bind("unload", function() { });