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. Это должно привести к блокировке вызова, не позволяя странице закрываться слишком быстро, что не позволяет выполнить запрос.