在用户浏览到新页面或关闭浏览器之前运行javascript

在用户浏览到新页面或关闭浏览器之前运行javascript,javascript,Javascript,我收集关于用户在页面上所做操作的数据。我希望在访问者离开页面时停止数据收集。如果访问者导航到一个新页面时没有出现以下脚本问题,我可以收集数据。但是,如果访问者关闭选项卡或浏览器窗口,数据将丢失。无论访问者如何离开页面,我如何保留将其发送到数据库的功能 theData = ''; window.onbeforeunload = pageUnload; function pageUnload(){ if (window.XMLHttpRequest){ xmlhttp=n

我收集关于用户在页面上所做操作的数据。我希望在访问者离开页面时停止数据收集。如果访问者导航到一个新页面时没有出现以下脚本问题,我可以收集数据。但是,如果访问者关闭选项卡或浏览器窗口,数据将丢失。无论访问者如何离开页面,我如何保留将其发送到数据库的功能

theData = '';
window.onbeforeunload = pageUnload; 

function pageUnload(){
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }
    else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","http://www.thesite.com/collector.php?data="+theData+"",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
}

保证代码正常工作的唯一方法是使其同步,但这是不推荐的,所以谁知道它能工作多久。chrome/firefox有sendBeacon,但IE没有,所以在现代浏览器中,当浏览器关闭时发送Ajax请求是不会失败的。它们会杀死所有活动/挂起的http请求。@JaromandaX-同步更改实际上是暂时解决问题的好办法。我甚至没想到。刚刚测试过,效果还不错。我会调查森贝肯的。也许Edge会支持它不喜欢SendBeacon在服务器端可以这样做吗?我的意思是,有可能在课时结束时完成这项工作吗?