window.onbeforeunload()
se déclenche-t-il dans tous les navigateurs? J'ai besoin d'une fonctionnalité onbeforeunload qui est prise en charge au moins par IE6 et FF3.6.
Pour IE, onbeforeunload()
semble seulement être pris en charge par IE9
J'ai trouvé une solution de contournement pour Firefox avec la fonction setTimeout
car elle n'a pas le même comportement que les autres navigateurs Web.
window.onbeforeunload = function (e) {
var message = "Are you sure ?";
var firefox = /Firefox[\/\s](\d+)/.test(navigator.userAgent);
if (firefox) {
//Add custom dialog
//Firefox does not accept window.showModalDialog(), window.alert(), window.confirm(), and window.Prompt() furthermore
var dialog = document.createElement("div");
document.body.appendChild(dialog);
dialog.id = "dialog";
dialog.style.visibility = "hidden";
dialog.innerHTML = message;
var left = document.body.clientWidth / 2 - dialog.clientWidth / 2;
dialog.style.left = left + "px";
dialog.style.visibility = "visible";
var shadow = document.createElement("div");
document.body.appendChild(shadow);
shadow.id = "shadow";
//tip with setTimeout
setTimeout(function () {
document.body.removeChild(document.getElementById("dialog"));
document.body.removeChild(document.getElementById("shadow"));
}, 0);
}
return message;
}
GitHub: https://github.com/Aelios/crossbrowser-onbeforeunload
Non, il ne se déclenche pas dans tous les navigateurs. Il n'est pas pris en charge dans les navigateurs mobiles, par exemple Safari, Opera Mobile & mini, Dolphin. Voir Existe-t-il une méthode alternative à utiliser onbeforeunload dans le safari mobile?
S'appuyant sur la solution Tushar Ahirrao, cela fonctionne sur plusieurs navigateurs et se déclenche une fois (fonctionne dans Firefox, Chrome, peu importe)
<html>
<head>
<script type="text/javascript">
var app = {};
app.unloaded = false;
app.unload = function() {
if (app.unloaded) return; else app.unloaded = true;
// your code here
return "YO";
};
</script>
</head>
<body onunload="return app.unload();" onbeforeunload="return app.unload();">
YO
</body>
</html>
Coller le modèle ci-dessus pour vider le fichier puis le modifier
Je me souviens que IE était le seul navigateur à implémenter onbeforeunload
, mais certains navigateurs ont pris sur eux de le mettre en œuvre.
Pour faire court, IE est le seul navigateur (avec des exceptions très limitées) dans lequel vous trouverez cet événement de manière cohérente.