onbeforeunload和onunload之间的区别

时间:2011-08-01 07:51:24

标签: javascript ipad safari mobile-safari onbeforeunload

onbeforeunload和onunload有什么区别? 另外我有一个与它在iPad上的使用有关的具体问题...我有一个页面(myPage.html),我试图在页面关闭时显示警告(即按下X关闭iPad上的标签)

现在我尝试使用window.onunload和window.onbeforeunload 以下是我在iPad上的调查结果;

  1. 使用window.onunload,我可以在用户导航到myPage.html的其他页面时收到提醒(通过点击某些链接或在myPage.html上进行Google搜索)。但是,从最小化视图(X)

  2. 关闭选项卡时没有任何反应
  3. 使用window.onbeforeunload,即使用户从myPage.html导航到不同的页面,或者如果他从最小化视图中关闭标签(X),我也不会收到提醒。

  4. 我想知道是否有其他方法可以解决此问题?

    谢谢。

4 个答案:

答案 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

  • 在卸载开始前调用
  • MDN tells me您可以使用event.preventDefault();
  • 取消关闭页面
  • 或通过返回非空值(即值!= 0),页面将弹出一个确认对话框,允许用户选择取消关闭
  • MDN还说Opera 12及其支持onbeforeunload - 看起来它已经支持了一段时间了

onunload

  • 在卸载开始后调用,但在任何资源释放之前调用(我不清楚在此期间 完成了什么)
  • 此时取消关闭页面为时已晚

我可以想到为什么您希望onunload使用onbeforeunload而不是onunload的唯一原因是您的{{1}}代码需要花费一些重要时间,并且不想要用户查看关闭时挂起的窗口。

答案 3 :(得分:8)

onbeforeunloadonunload之间的一个显着差异(除了可取消性)是前者是为下载链接触发而后者不是。示例:<a href="https://somewhere.com/thething.zip">download</a>将触发onbeforeunload处理程序,但不会触发onunload