w3schools w3school tag promises page example ejemplo javascript html dom w3c specifications

javascript - w3school - Se puede usar antes de descargar/descargar para enviar XmlHttpRequests de forma confiable



title w3school (3)

Eche un vistazo a navigator.sendBeacon() , que le permite enviar datos de manera confiable a un servidor incluso cuando la página se está descargando. Actualmente está en un borrador de especificación y es compatible con Firefox 31, Chrome 39 (detrás de una bandera de 37), detrás de una bandera en Opera 24.

Se podría "clasificar" por medio de algo como lo siguiente:

navigator.sendBeacon = navigator.sendBeacon || function (url, data) { var xhr = new XMLHttpRequest(); // Need to send synchronously to have the best chance of data getting // through to the server xhr.open(''POST'', url, false); xhr.send(data); };

Otras lecturas:

Recientemente, tuve el requisito urgente de avisar a mi servidor, que una página específica de mi aplicación web está a punto de cerrarse. " Easy peasy ", pensé, antes de beforeunload está disponible durante bastante tiempo. La "cosa" de HTML5 actualizó incluso la especificación (eso era lo que pensaba ...) al respecto, en la forma en que teníamos la opción de return un valor de cadena de un controlador de eventos de beforeunload y beforeunload , lo que le da a un usuario la opción de interceptar.

Consulte la página de MDN acerca de onbeforeunload de onbeforeunload

Sin embargo, resultó que no hay ninguna especificación " oficial " disponible, que describa el comportamiento de la beforeunload anterior hasta esta fecha. El único documento oficial que encontré fue en WHATWG , que es solo una propuesta para el W3C, por supuesto.

Ver WHATWG

Hasta ahora tan bueno. Podemos crear una solicitud XHR sincronizada dentro de un controlador de eventos de beforeunload . La mayoría de los navegadores le dan a esa solicitud un período de tiempo de aproximadamente 1-2 segundos para que se complete, luego de eso se eliminará. Solicitud asíncrona estándar se eliminan de inmediato. Habiendo dicho eso, ni siquiera puedo decir de "dónde" lo sé, parece chisme y boca a boca mirándolo ahora. Aun así, funciona en Firefox + Chrome, no podemos confiar en eso, ¿podemos?

¿Hay alguna discusión / propuesta en curso sobre WHATWG acerca de la beforeunload ?
¿Algún otro recurso oficial sobre el evento que podría no haber encontrado?

Y lo que es más importante para mí aquí, ¿con qué fiabilidad podemos enviar datos a través de sync-XHR allí?


Lo que hay que tener en cuenta es que beforeunload la beforeunload inició como una extensión de Internet Explorer. Automáticamente, eso lo convierte en un ciudadano de segunda clase en la web. No hay especificación, y la implementación del navegador varía. Por ejemplo, Firefox solo lo implementa parcialmente al no mostrar la cadena, solo un mensaje genérico.

Además, incluso cuando está completamente implementado, no protege contra todos los posibles escenarios de descarga, por ejemplo, el usuario ha apagado el procesador, el navegador se ha bloqueado o se ha apagado la computadora. Incluso ignorando estos escenarios extremos, sospecho que podría ser posible configurar su navegador para ignorar tales solicitudes.

Mi sensación es que no debes confiar en este mensaje para salvarte. Si esta aplicación web es interna, sugeriría entrenarlos para usar los botones Save o Close o lo que sea, en lugar de simplemente cerrar la pestaña. Si es externo, tal vez busque en el ahorro automático ya que el usuario hace lo suyo.