在Internet Explorer上卸载事件之前的正确使用方式

Correct way to use before unload event on Internet Explorer?

本文关键字:方式 Explorer Internet 卸载 事件      更新时间:2023-09-26

当用户离开网站时,我正在后台跟踪数据。这适用于firefox和chrome。但在internet explorer上不起作用。在Internet Explorer上卸载事件之前,正确的使用方法是什么?

$(window).bind('beforeunload', function () {
    $.post("track.php", {
        async: false,
        ip: ip,
        plansclick: plansclick,
    });
});

似乎是beforeunload事件的问题。这在jQuery.unload上被描述为

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

beforeunloadunload更可靠,但一定要直接分配(不通过jQuery绑定),如下所示:

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

卸载事件本身并不是为了完成工作,只是为了清理对象。。。随着垃圾收集器变得越来越好,浏览器甚至没有理由触发卸载事件。

因此,您可以尝试将代码转换为:

window.onbeforeunload = function () {
    $.post("track.php", {
        async: false,
        ip: ip,
        plansclick: plansclick,
    });
};

但是,该功能在任何浏览器中似乎都不受保护。

jQuery.obeforeunload的可能修复程序
stackoverflow上的重复问题
stackoverflow 2上的重复问题
stackoverflow 3 上的重复问题