Los browseres continúan realizando Javascript después de "PageUnload" y el nuevo "PageLoad"

Tenemos el siguiente acelerador de AJAX. Esto se implementó para poder realizar muchas (más de 20) requestes ajax para una página sin que el rest se agotara solo porque las primeras requestes de X tomaron un total de 60 segundos.

RequestThrottler: { maximumConcurrentRequests: 3, //default to 3 requestQueue: new Array(), numberOfRequestCurrentlyProcessing: 0, addRequestToQueue: function (currentRequest) { var self = this; self.requestQueue.push(currentRequest); if (self.numberOfRequestCurrentlyProcessing < self.maximumConcurrentRequests) { self.sendNextRequest(); } }, sendNextRequest: function () { var self = this; if (self.numberOfRequestCurrentlyProcessing >= self.maximumConcurrentRequests) { return; } if (self.requestQueue.length === 0) { return; } var currentRequest = self.requestQueue.pop(); self.numberOfRequestCurrentlyProcessing++; AJAX.SendAjaxRequest(currentRequest.url, currentRequest.httpMethod, function(data){ self.numberOfRequestCurrentlyProcessing--; currentRequest.onSuccessCallback(data); self.sendNextRequest(); }, function(){ self.numberOfRequestCurrentlyProcessing--; currentRequest.onErrorCallback(); self.sendNextRequest(); }); }, sendUpdateRequest: function (currentRequest) { var self = this; self.addRequestToQueue(currentRequest); } } 

Sin embargo, debido a que estas requestes se encuentran en una queue de Javascript, cuando el usuario intenta cargar una página nueva, las herramientas de desarrollador muestran las respuestas en el área de NET de la página nueva. Nuestra aplicación tiene un control establecido por razones de privacidad para no permitir este tipo de comportamiento. ¿Es esto normal para los browseres, o es algún tipo de error, o estoy haciendo algo mal?

Una solución limpia sería escuchar la window.onbeforeunload evento para abort cualquier request ajax que aún no haya recibido una respuesta.

El evento beforeunload se debe usar en lugar de unload por las siguientes razones:

1) El evento beforeunload es más confiable que el evento de unload :

El manejo exacto del evento de descarga ha variado de una versión a otra de los browseres. Por ejemplo, algunas versiones de Firefox activan el evento cuando se sigue un enlace, pero no cuando se cierra la window. En el uso práctico, el comportamiento debe probarse en todos los browseres admitidos, y debe contrastarse con el evento de descarga previa patentado.

fuente:

2) El evento beforeunload se puede cancelar mientras que el evento de unload no se puede cancelar. Esto le daría la flexibilidad si quisiera avisarle al usuario cuando ocurre un evento de descarga previa. La confirmación le preguntará al usuario si desea continuar navegando a la otra página o si desea cancelar porque no se han completado todas las requestes de Ajax.

 window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; (e || window.event).returnValue = confirmationMessage; // Gecko and Trident return confirmationMessage; // Gecko and WebKit }); 

fonts: