Crossbrowser onbeforeunload?

时间:2011-09-12 14:35:43

标签: javascript cross-browser onbeforeunload

window.onbeforeunload()是否会在所有浏览器中触发?我需要一个至少由IE6和FF3.6支持的onbeforeunload功能。

对于IE,onbeforeunload()似乎只是supported by IE9

5 个答案:

答案 0 :(得分:14)

我找到了具有setTimeout功能的Firefox解决方法,因为它与其他网络浏览器的行为不同。

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

答案 1 :(得分:5)

不,它不会在所有浏览器中触发。移动浏览器不支持它,例如Safari,Opera Mobile&迷你,海豚。见Is there an alternative method to use onbeforeunload in mobile safari?

答案 2 :(得分:2)

在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>

将上面的模板粘贴到空文件然后进行编辑

答案 3 :(得分:1)

我的回忆是,IE是唯一实现onbeforeunload的浏览器,但有些浏览器已经自行实现它。

长话短说,IE是关于唯一的浏览器(除了非常有限的例外),你会一直发现这个事件。

答案 4 :(得分:-6)

然后你可以这样使用:

<body onunload="functionName();" onbeforeunload='functionName();' >