我需要在window.onbeforeunload中调用功能,如下所示,
window.onbeforeunload = function() {
getMyApp("mySwf").cancelFunction();
}
但问题是窗口在调用功能之前就已关闭。有人可以帮忙解决这个问题吗?
答案 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.";
}
完成启动操作后,您可以通过编程方式关闭窗口。