javascript - window.onunload no funciona correctamente en el navegador Chrome. ¿Alguien puede ayudarme?
browser (7)
He escrito este código
function winUnload() {
alert("Unload Window");
MyMethod();
}
window.onunload = function() { winUnload(); }
Este código funciona bien en IE y Firefox. Pero este código no funciona en Chrome. Ambas declaraciones de alert("Unload Window");
y MyMethod();
no están funcionando.
El evento onunload no se activará si el evento onload no se activa. Lamentablemente, el evento de carga espera a que se cargue todo el contenido binario (por ejemplo, imágenes) y los scripts en línea se ejecutan antes de que se active el evento onload. DOMContentLoaded cuando la página está visible, antes de que onload lo haga. Y ahora es estándar en HTML 5 , y puede probar el soporte del navegador, pero tenga en cuenta que esto requiere <!DOCTYPE html>
(al menos en Chrome). Sin embargo, no puedo encontrar un evento correspondiente para descargar el DOM. Y tal evento hipotético podría no funcionar porque algunos navegadores pueden mantener el DOM alrededor para realizar la función "restaurar pestaña".
La única solución potencial que encontré hasta ahora es la API Visibilidad de página , que parece requerir el <!DOCTYPE html>
.
Esto funciona :
var unloadEvent = function (e) {
var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
Hay algunas acciones que no están funcionando en Chrome, dentro del evento de descarga. Las cajas de alerta o confirmación son tales cosas.
Pero qué es posible (AFAIK):
- Abrir ventanas emergentes (con window.open) - pero esto solo funcionará, si el bloqueador de pop-ups está deshabilitado para su sitio
- Devuelve una cadena simple (en evento beforeunload), que activa un cuadro de confirmación, que le pregunta al usuario si quiere abandonar la página.
Ejemplo para el n. ° 2:
$(window).on(''beforeunload'', function() {
return ''Your own message goes here...'';
});
Demostración: http://jsfiddle.net/PQz5k/
La respuesta de Armin es muy útil, gracias. # 2 es lo más importante que debes saber al tratar de configurar los eventos de descarga que funcionan en la mayoría de los navegadores: no puedes alertar () o confirmar (), pero devolver una cadena generará una confirmación modal.
Pero descubrí que incluso con solo devolver una cadena, tuve algunos problemas de navegador específicos para Mootools (usando la versión 1.4.5 en este caso). Esta implementación específica de Mootools funcionó muy bien en Firefox, pero no dio como resultado una ventana emergente de confirmación en Chrome o Safari:
window.addEvent("beforeunload", function() {
return "Are you sure you want to leave this page?";
});
Para que mi evento onbeforeonload funcione en todos los navegadores, tuve que usar la llamada nativa de JavaScript:
window.onbeforeunload = function() {
return "Are you sure you want to leave this page?";
}
No estoy seguro de por qué este es el caso, o si se ha solucionado en versiones posteriores de Mootools.
Por favor, intente window.onbeforeunload en lugar de window.onunload para Chrome. También puede intentar llamar antes de la descarga de la etiqueta body> que podría funcionar en chrome.
Sin embargo, tenemos un problema con la función de descarga en el navegador Chrome. por favor, compruebe
location.href no funciona en cromo cuando se llama a través del evento de descarga cuerpo / ventana
Gracias, Nived
Puede intentar utilizar el evento pagehide para Chrome and Safari
.
Verifique estos enlaces:
¿Cómo detectar el soporte del navegador para pageShow y pageHide?
http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
Sé que esto es viejo, pero encontré la manera de hacer que la descarga funcione con Chrome
window.onbeforeunload = function () {
myFunction();
};