我有以下处理:
$(window).bind('pageshow', function() { alert("back to page"); });
当我导航离开该页面(按一个链接)并返回页面(按“返回”按钮), 警报()不叫(新iPad 2的iOS 5.1)。
什么我做错了吗? 任何其他事件中,我需要绑定?
PS:有趣的是,导航离开该页面时pagehide被正确接收。
我有以下处理:
$(window).bind('pageshow', function() { alert("back to page"); });
当我导航离开该页面(按一个链接)并返回页面(按“返回”按钮), 警报()不叫(新iPad 2的iOS 5.1)。
什么我做错了吗? 任何其他事件中,我需要绑定?
PS:有趣的是,导航离开该页面时pagehide被正确接收。
您可以检查persisted
的财产pageshow
事件。 它被设置为在初始页面加载错误。 当页面从缓存中加载它被设置为true。
window.onpageshow = function(event) {
if (event.persisted) {
alert("back to page");
}
};
出于某种原因,jQuery的没有在事件此属性。 您可以从原始的事件,虽然找到它。
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("back to page");
}
};
这可能是一个缓存的问题。 当您通过“返回”按钮返回到该页面,该页面正在从缓存中提取的(行为是依赖于浏览器)。 正因为如此,你的JS将不会触发,因为该页面在缓存中已经呈现并重新运行您的JS可能不利于布局和这样的。
您应该能够通过调整你的缓存头在你的回应,或使用浏览器技巧屈指可数克服这一点。
下面是对这个问题的一些链接:
编辑
这些都是从上面的链接拉:
history.navigationMode = 'compatible';
<body onunload=""><!-- This does the trick -->
pageshow
和pagehide
。” $(document).ready(handler)
window.onunload = function(){};
你在做什么有约束力的返回值alert("back to page")
作为回调。 这是行不通的。 您需要绑定一个函数:
$(window).bind('pageshow', function() { alert("back to page"); });