0

我有多個不屬於我的域的腳本,這些域將數據發送到頁面出口的AWS SQS隊列。當我將接收數據的次數與頁面上加載腳本的次數進行比較時,我發現57%的時間沒有收到數據。我預計不會收到數據,可能會有10 - 20%的時間可以接受。數據正在捕獲用戶操作,因此我不能在離開頁面之前發送任何內容。我想知道如果我在代碼中做了明顯錯誤的事情。任何幫助是極大的讚賞。嘗試在頁面退出時使用javascript發送跨數據域域

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

嘗試將xhr.open()的第三個參數設置爲false。這應該會導致呼叫被阻止,從而阻止頁面過快關閉,從而阻止請求被創建。