onbeforeunload和onunload之间的区别

tes*_*dtv 33 javascript safari onbeforeunload mobile-safari ipad

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

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

  1. 使用window.onunload,当用户从myPage.html导航到不同的页面时(通过点击某些链接或在myPage.html上进行Google搜索),我能够收到提醒.但是,从最小化视图(X)关闭选项卡时没有任何反应

  2. 使用window.onbeforeunload,即使用户从myPage.html导航到不同的页面,或者如果他从最小化视图中关闭选项卡(X),我也不会收到警报.

我想知道是否有其他方法可以解决这个问题?

谢谢.

nob*_*ies 19

添加AlienWebguy的ans,以避免在支持这两个事件的浏览器上进行双重调用,

var onBeforeUnLoadEvent = false;

window.onunload = window.onbeforeunload= function(){
if(!onBeforeUnLoadEvent){
  onBeforeUnLoadEvent = true;
  //your code here
  }
};
Run Code Online (Sandbox Code Playgroud)


Ali*_*guy 15

onunload负责在页面关闭时执行指令.它还会导致IE和AJAX出现问题.

onbeforeunload 效率更高,因为它不会与窗口的实际关闭竞争,而是在之前触发 onunload

我知道Opera曾经不承认onbeforeunload- 不确定他们是否已经解决了这个问题,但我总是注册听众以保证两者的安全:

window.onunload = window.onbeforeunload = (function(){...
Run Code Online (Sandbox Code Playgroud)

  • window.onunload = window.onbeforeunload =(function(){...,如果浏览器对这两个事件都没有问题,将执行两次该函数. (20认同)
  • 很多...但是有关iPad实现的任何想法? (4认同)

B T*_*B T 10

onbeforeunload:

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

onunload:

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

我能想到的,你为什么会想使用的唯一原因onunloadonbeforeunload将在您的onunload代码可能需要一些时间显著,并且不希望用户看到,而关闭该挂起的窗口.


dvd*_*plm 8

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

  • 我无法在Chrome上重现这一点.你有这方面的文件吗? (5认同)