Operaはbeforeunloadでは動作しないと聞きました。また、IEの以前のバージョンもいくつかあります。では、どうすればこれらを一緒に使用できますか?以下を使用すると、Firefoxで2回実行されます(すべて動作します)。
$(window).bind('beforeunload', function () {
});
$(window).unload(function () {
});
Operaはbeforeunloadでは動作しないと聞きました。また、IEの以前のバージョンもいくつかあります。では、どうすればこれらを一緒に使用できますか?以下を使用すると、Firefoxで2回実行されます(すべて動作します)。
$(window).bind('beforeunload', function () {
});
$(window).unload(function () {
});
ある種のフラグを使用する必要があります。または、次のようなものを使用できますhttp://documentcloud.github.com/underscore/#once
function unloadHandler(m){
alert(m);
}
if ($(window).unload) {
$(window).unload(function() {
unloadHandler("unload");
});
} else if ($(window).beforeunload) {
$(window).bind('beforeunload', function() {
unloadHandler("beforeunload");
});
}
これを行うにはいくつかの方法があります。次の例は、グローバルフラグを使用すると非常に簡単です。
var hasUnloadBeenHandled = false;
function onUnload() {
if (hasUnloadBeenHandled) {
return;
}
//Whatever you want to be handled on unload OR on beforeunload
hasUnloadBeenHandled = true;
}
$(window).bind('beforeunload', function () {
onUnload();
});
$(window).unload(function () {
onUnload();
});
私はJavascript/JQueryの人ではありませんが、メソッドを実行する必要があるかどうかを追跡するためにグローバル変数を使用することはできませんか?
何かのようなもの
var runme = true;
$(window).bind('beforeunload', function () {
if(runme){
runme=false;
}
});
$(window).unload(function () {
if(runme){
runme=false;
}
});