jQuery:unload还是beforeunload?

52

我想在用户离开当前页面时向服务器发送消息,目前我正在使用 .unload,但结果并不可靠,尽管其文档中说是这样的:

从浏览器版本到版本的确切处理卸载事件有所不同。例如,某些 Firefox 版本会在跟随链接时触发事件,但关闭窗口时则不会。在实际使用中,行为应在所有支持的浏览器上进行测试,并与专有的 beforeunload 事件进行对比。

我应该使用 beforeunload 事件吗?它可靠吗?


1
FYI:unload已被弃用,https://api.jquery.com/unload/ - Bilbo Baggins
1个回答

68

是的,beforeunload更加可靠,但一定要直接分配它(不通过jQuery绑定),像这样:

window.onbeforeunload = function() { /* do stuff */ };

unload事件本身并不是为了处理工作,只用于清理对象...随着垃圾收集器变得越来越好,浏览器甚至不再需要触发unload事件。

还要注意,在您的特定情况下,您需要向服务器发出同步请求...否则,浏览器仍然不会等待AJAX调用完成。


1
window.onbeforeunload事件在所有浏览器上都会触发吗(比如IE6)? - Kangkan
1
@Kangkan - 是的,尽管一些更阴险的广告拦截器会阻止这种情况...但它们相当罕见。 - Nick Craver
16
为什么不应该通过jQuery来绑定它?这样做会使它变得不可靠吗? - kmb64
3
不通过jQuery?提供一些参考资料会比较好,否则这只会散布恐慌情绪。 - Marc-André Lafortune
4
如果原生函数在各种浏览器中都得到良好支持,那么jQuery文档本身建议优先使用原生JavaScript而不是jQuery。一个原因是原生函数内置于浏览器中,因此比jQuery库函数更快。 - Chaoley
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接