想要在window.onbeforeunload上调用一个功能

时间:2012-03-14 07:30:25

标签: javascript-events

我需要在window.onbeforeunload中调用功能,如下所示,

    window.onbeforeunload = function() {
        getMyApp("mySwf").cancelFunction(); 
  }

但问题是窗口在调用功能之前就已关闭。有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果您正在执行的操作是在onbeforeunload处理程序中同步完成的,那么它似乎可以正常工作。浏览器执行您的操作然后关闭。

如果操作是异步的,即您触发在另一个线程中处理的事件,或者您设置了一个稍后触发的计时器,那么它可能会被忽略,因为该窗口发送一个事件并立即关闭。 (顺便说一句,如果您正在与插件进行通信,那么代码中看起来同步的操作可能会在插件中异步实现,出于稳定性目的或其他目的)。

一个选项是在onbeforeunload处理程序中显示弹出消息,并希望在用户查看消息时完成您正在执行的操作。

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    alert("Please wait while the file is saved.");
}

另一种方法是防止窗口关闭。在Web浏览器中执行此操作的唯一方法是显示确认对话框。对话框消息的某些部分是由浏览器预定义的,但您可以添加一段文本。用户无论如何都可以关闭窗口,但您可以建议不要关闭它。此外,当用户查看消息时,您的任务即使是异步也可能会完成。

显示预定义的确认对话框:

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    event.returnValue=true;                // display confirmation message
}

显示添加文字的确认对话框:

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    event.returnValue="If you close the window, unsaved edits will be lost.";
}

完成启动操作后,您可以通过编程方式关闭窗口。