是否window.onbeforeunload()
在所有浏览器中触发?我需要至少 IE6 和 FF3.6 支持的 onbeforeunload 功能。
对于 IE,onbeforeunload()
似乎只有IE9 支持
是否window.onbeforeunload()
在所有浏览器中触发?我需要至少 IE6 和 FF3.6 支持的 onbeforeunload 功能。
对于 IE,onbeforeunload()
似乎只有IE9 支持
我找到了一种具有setTimeout
功能的Firefox 解决方法,因为它与其他 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
不,它不会在所有浏览器中触发。它在移动浏览器中不受支持,例如 Safari、Opera Mobile & mini、Dolphin。请参阅是否有其他方法可以在移动 Safari 中使用 onbeforeunload?
建立在 Tushar Ahirrao 解决方案的基础上,它可以跨浏览器工作并触发一次(适用于 Firefox、Chrome 等)
<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>
将上面的模板粘贴到空文件中,然后对其进行编辑
我记得 IE 是唯一实现 IE 的浏览器onbeforeunload
,但有些浏览器已经自行实现了它。
长话短说,IE 是唯一一个你会发现这个事件始终存在的浏览器(有非常有限的例外)。
然后你可以像这样使用两者:
<body onunload="functionName();" onbeforeunload='functionName();' >