2012-03-12 31 views
1

我有一个写入窗体正文的onunload方法。由于该页面从服务器获取大量内容以供流式传输,因此下载整个表单需要一段时间。当表单被下载到浏览器中时,如果用户单击窗口关闭按钮,有时会发生unload事件(写入以调用服务器端操作以重置某个标志)。卸载方法是写在页面的末尾,这是一个原因吗?无论如何,我们可以确保onunload保证被称为?HTML页面卸载不会总是在IE中调用

+0

从我过去的经验来看,onunload事件不会保证只要您希望运行就可以运行。如果在代码完成之前加载下一页,则可能无法完成。根据应用程序的不同,您可以执行警报或确认提示,为您的代码提供一些执行时间。 – GoldenNewby 2012-03-12 03:28:13

回答

0

有两个原因。其中之一就像你说的那样,浏览器甚至可能不会卸载,所以你应该把它声明在你的身体标记之上。

另一方面,正如GoldenNewby所述,您需要给代码一些时间来完成,比如提醒。这是因为在下一页准备就绪时JavaScript将从内存中清除,并且只会在旧脚本上停止执行。如果您可以保证脚本比页面加载花费的时间更少,则不需要警报,但如果执行时间可能需要2ms或更长时间,则需要花费一些时间。

0

IE有一个onbeforeunload事件,您可以使用它。只需设置一个标志,以便您的onunload可以提前退出,如果onbeforeunload已经做到了。

window.onunload = window.onbeforeunload = function() { 
    if (window.isAlreadyUnloaded) return; 
    window.isAlreadyUnloaded = true; 
    // do your stuff here. 
} 
1

击中你可能是事实,如果在window.onload还没有启动IE不会触发unload事件的事情。本博客文章中描述了解决方案:http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/

+0

注意:该博客文章中描述的onstop事件在更现代版本的IE(至少10和11)中的工作方式不同。在onload事件之前从页面导航(或刷新)时,它不会触发。对我来说,工作解决方案不仅要将处理程序绑定到onload,还要绑定到onbeforeunload事件。 – 2013-11-26 12:12:04