onbeforeunload和onunload有什么区别? 另外我有一个与它在iPad上的使用有关的具体问题...我有一个页面(myPage.html),我试图在页面关闭时显示警告(即按下X关闭iPad上的标签)
现在我尝试使用window.onunload和window.onbeforeunload 以下是我在iPad上的调查结果;
使用window.onunload,我可以在用户导航到myPage.html的其他页面时收到提醒(通过点击某些链接或在myPage.html上进行Google搜索)。但是,从最小化视图(X)
使用window.onbeforeunload,即使用户从myPage.html导航到不同的页面,或者如果他从最小化视图中关闭标签(X),我也不会收到提醒。
我想知道是否有其他方法可以解决此问题?
谢谢。
答案 0 :(得分:18)
添加AlienWebguy的ans,以避免在支持这两个事件的浏览器上进行双重调用,
var onBeforeUnLoadEvent = false;
window.onunload = window.onbeforeunload= function(){
if(!onBeforeUnLoadEvent){
onBeforeUnLoadEvent = true;
//your code here
}
};
答案 1 :(得分:14)
onunload
负责在页面关闭时执行指令。它还会导致IE和AJAX出现问题。
onbeforeunload
效率更高,因为它不会与实际关闭窗口竞争,并且会在onunload
之前触发
我知道Opera过去不承认onbeforeunload
- 不确定他们是否已经解决了这个问题,但我总是注册听众,以确保安全:
window.onunload = window.onbeforeunload = (function(){...
答案 2 :(得分:9)
onbeforeunload
:
event.preventDefault();
onunload
:
我可以想到为什么您希望onunload
使用onbeforeunload
而不是onunload
的唯一原因是您的{{1}}代码需要花费一些重要时间,并且不想要用户查看关闭时挂起的窗口。
答案 3 :(得分:8)
onbeforeunload
和onunload
之间的一个显着差异(除了可取消性)是前者是为下载链接触发而后者不是。示例:<a href="https://somewhere.com/thething.zip">download</a>
将触发onbeforeunload
处理程序,但不会触发onunload
。