我有一个不属于我的多个域的脚本,它在页面退出时将数据发送到AWS SQS队列。当我将接收数据的次数与页面上加载脚本的次数进行比较时,我显示57%的时间我没有收到数据。我希望不会收到10到20%的可接受数据。数据正在捕获用户操作,因此我不能在离开页面之前发送任何内容。我想知道我的代码中是否做了明显错误的事情。非常感谢任何帮助。
function addEvent(){
var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable
myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
if(e || window.event){
pageUnload();
}
});
}
addEvent();
function pageUnload(){
var host = window.location.host;
var path = window.location.pathname;
window.parent.data = '';
for (var i = 0; i < arrayCount; i++){
for (var j = 0; j < dataArray[i].length; j++){
window.parent.data += dataArray[i][j];
}
}
var urlString = 'h='+host+'&p='+path+'&'+window.parent.data;
var url = 'http://www.AWS_SQS_QUEUE.com?Action=SendMessage&MessageBody='+encodeURIComponent(urlString);
var method = 'HEAD';//Changed from GET to HEAD to avoid Cross Domain blocking in FF
if (navigator.sendBeacon) {
navigator.sendBeacon(url, null);
}
else{
var xhr = new XMLHttpRequest();
if("withCredentials" in xhr) {
xhr.open(method, url, true);
}
else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
}
else {
xhr = null;
}
if (!xhr){
return;
}
xhr.send();
}
}
答案 0 :(得分:0)
尝试将xhr.open()
上的第三个参数设置为false
。这会导致调用被阻塞,从而阻止页面关闭得太快而无法停止请求。