私のアプリケーションに関する質問があります。ユーザーが誤ってブラウザウィンドウを閉じるたびに、その前にいくつかのクリーンアップ操作を行いたいと思います。 onunloadイベントを使用しましたが、問題はこのイベントが時々発生し、時々発生しないことです。私は何をすべきか、そのようなタイプの問題を処理するより良い方法があります。
window.onbeforeunload = function() {
return 'You have unsaved changes!';
}
onbeforeunloadに関するMSDNの記事 を参照してください。
また、SOには 類似の質問 があります
試してください:
window.onbeforeunload = function() { ...your code... }
私の経験から、onunloadはブラウザによって動作が異なります。代わりにonbeforeunloadという別のイベントハンドラを使用しないのはなぜですか。動作するはずです。 Onbeforeunloadは、ウィンドウが閉じる前に最初に実行されるため、問題を解決できます。
これは動作します:
window.onbeforeunload = function(){
console.log('closing shared worker port...');
return 'Take care now, bye-bye then.';
};
これは、たとえばSharedWorkersで作業していて、管理するポートが1つ少ないことをワーカーに伝える必要がある場合に便利です。他のタブの更新が新しいポート接続をアレイにプッシュし続ける間、1つのタブがワーカーを生かし続けているためです。
お役に立てれば。
これは、ユーザーがウィンドウを閉じ、ブラウザメッセージをある程度ハイジャックする場合にのみonbeforeunloadを与える私の答えの1つです.....
<html>
<head>
<script src='http://code.jquery.com/jquery-1.6.2.min.js'></script> <!--this is get jquery header file its not required but i have used jquery for minor correction-->
<script type="text/javascript" src="http://fbug.googlecode.com/svn/lite/branches/firebug1.4/content/firebug-lite-dev.js"></script><!--this will give a firebug to check the console in IE-->
<script language='javascript'>
window.onbeforeunload = function(evt){
var message = "";
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; //validating the browser where its chrome or not
if(is_chrome){
message = "Do you want to close the browser or not?";
}
if(this.flag == 1 || $('#help').css('background-color') == 'red'){
console.log("red");
return message;
} else { console.log("blue"); return NULL;}
}
function change(){
$('#help').css('background-color','red');
this.flag = 1;
}
</script>
</head>
<body>
<a id='help' onclick=change() title="please click on Links">Links</a>
</body>
</html>
私はそれがすべての体に役立つかもしれないと思う。
セキュリティ上の理由により、これは許可されていません。 onbeforeunloadは、ブラウザごとに動作が異なるブラウザAPIです。