在@ IPad上的Safari上按“后退”按钮时,不会收到“pageshow”
我有以下处理程序:
$(window).bind('pageshow', function() { alert("back to page"); });
当我离开页面(通过按下链接)并返回页面(通过按“后退”按钮)时,不会调用alert() (IPad 2,iOS 5.1)。
我做错了什么? 我需要绑定的任何其他事件?
PS:有趣的是,在离开页面时正确接收了Pagehide 。
您可以检查pageshow
事件的persisted
属性。 初始页面加载时设置为false。 从缓存加载页面时,它设置为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可能对布局等有害。
您应该能够通过在响应中调整缓存标头或使用一些浏览器技巧来克服这个问题。
以下是该问题的一些链接:
- 单击后退按钮时是否存在跨浏览器onload事件?
- 返回Firefox历史记录后,JavaScript将无法运行
编辑
这些都来自上述链接:
-
history.navigationMode = 'compatible';
-
- “Firefox 1.5+和Safari的下一个版本(包含bug 28758的修复程序)支持称为
pageshow
和pagehide
特殊事件。” - 使用jQuery的
$(document).ready(handler)
-
window.onunload = function(){};
你在那里做的是将alert("back to page")
的返回值alert("back to page")
绑定为回调。 那不行。 你需要绑定一个函数:
$(window).bind('pageshow', function() { alert("back to page"); });