web-dev-qa-db-ja.com

クロスブラウザonbeforeunload?

window.onbeforeunload() はすべてのブラウザで起動しますか?少なくともIE6とFF3.6でサポートされているonbeforeunload機能が必要です。

IEの場合、onbeforeunload()IE9でサポート のみのようです

37
powtac

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

14
Aelios

いいえ、すべてのブラウザで起動するわけではありません。モバイルブラウザではサポートされていません。 Safari、Opera Mobile&mini、Dolphin。 モバイルサファリでonbeforeunloadを使用する代替方法はありますか?

5
Ian Stanway

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>

上記のテンプレートを空のファイルに貼り付けて編集します

2
Jacek Pietal

IEがonbeforeunloadを実装する唯一のブラウザでしたが、一部のブラウザはそれを実装するためにそれを採用しました。

要するに、IEは、このイベントを一貫して見つけることができる唯一のブラウザについてです(非常に限られた例外はあります)。

1
Brad Christie