window.onbeforeunload不工作在iPad上?

有谁知道,如果在iPad上支持onbeforeunload事件和/或如果有不同的方式来使用它?

我已经尝试了几乎所有的东西,而且似乎从未在iPad(Safari浏览器)上触发onbeforeunload事件。

具体来说,这是我试过的:

  • window.onbeforeunload = function(event) { event.returnValue = 'test'; }
  • window.onbeforeunload = function(event) { return 'test'; }
  • (以上两者一起)
  • window.onbeforeunload = function(event) { alert('test')'; }
  • (所有上面的函数,但在<body onbeforeunload="...">

所有这些工作在PC上的FF和Safari上,而不是在iPad上。

另外,我刚刚加载页面之后完成了以下操作:

 alert('onbeforeunload' in window); alert(typeof window.onbeforeunload); alert(window.onbeforeunload); 

分别的结果是:

  • true
  • object
  • null

所以,浏览器确实有这个属性,但由于某种原因,它并没有被解雇。

我尝试从页面导航的方法是单击后退和前进button,在顶部栏中进行谷歌search,更改地址栏中的位置,然后单击书签。

有谁知道发生了什么? 我非常感谢任何input。

谢谢

我发现onunload()事件触发。 这行为有点奇怪; 无论你在你的callback函数附加到事件实际上运行后,新的页面加载在后台(你不能告诉它的加载,但服务器日志logging将显示它已经)。

更奇怪的是,如果你在你的onunload()中有一个confirm()调用,并且用户点击了一个链接去其他地方,那么你就是在做生意。 但是,如果用户closuresiPad Safari浏览器选项卡,则onunload()事件将触发,但您的confirm()将具有隐式取消作为响应。

这一点的JavaScript适用于我在Safari和Chrome上的ipad和iphone,以及桌面/笔记本电脑/其他浏览器:

 var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i); var eventName = isOnIOS ? "pagehide" : "beforeunload"; window.addEventListener(eventName, function (event) { window.event.cancelBubble = true; // Don't know if this works on iOS but it might! ... } ); 

只有苹果肯定会知道,但我的猜测是,他们故意没有在移动Safari中启用该function,因为它经常被阴暗的angular色用来让你留在他们的网站或popup大量的色情/广告窗口。

使用onbeforeunload 在WebKit中有一个已知的错误 。 我相信它已经在Chrome 5的最新testing版中得到修复,但是iPad的浏览器很可能是由没有修复的WebKit版本构成的。

相关的Chrome错误报告 。

https://code.google.com/p/chromium/issues/detail?id=97035

听到。

在页面解除事件(在卸载,卸载,页面隐藏之前)不再允许警报。

我认为警报,提示,确认,这样的其他行为也不再允许。

移动Safari不支持beforeunload事件。 您可以在这里看到所有支持事件的列表: 处理事件Apple文档

并且beforeunload不在列表中!

如果您只需要知道页面是否已经离开,您可以使用document.unload 。 它在ios浏览器中正常工作。 如果你看到苹果的文档,你会发现它已经被弃用,他们build议使用document.pagehide