タブ

2016-05-04 4 views
4

を閉じる前にJavaScriptの警告これは私のJavaScriptコードです:タブ

window.onbeforeunload = function (e) { 
     e = e || window.event; 
     // For IE and Firefox prior to version 4 
     if (e) { 
      e.returnValue = 'Any unsaved work is going to loose!'; 
     } 
     // For Safari 
     return 'Any unsaved work is going to loose!'; 
    }; 

私はタブを閉じるしようとすると、このコードは完璧に動作します。しかし、問題は、私のサイトの別のページに移動しようとしても警告を発することです。

ユーザがタブを閉じようとした場合にのみアラートを表示するジェネリックJSコードはありますか?

+0

を上げる場合の条件を追加してみてくださいませんが、ユーザーがアドレスバーを使用してナビゲートするケースを処理することはできません。とにかく、ハリケーンがユーザーハウスにぶつかるケースを処理できません。 –

+0

保存されていない作業が過度に許可されないと思わない限り、 "失われません" – psaxton

答えて

3

残念ながら、javascriptには純粋な「クローズ」イベントはありません。 onunload & onbeforeunloadはあなたができることの中で最善のことです。

これらのイベントは、ナビゲーションボタンとバックフォワードブラウザボタンでトリガされることがあります。ページ上のナビゲーションをフィルタリングするには、(e.clientY < 0)の条件を使用することができます。

+0

ユーザーはキーボードショートカットを使用してタブを閉じることができます。またはコンピュータをシャットダウンするだけでタブを閉じることができます。しかし、それは言った、あなたは正しく質問に答えて –

+2

@ A.Wolff申し訳ありませんが、このコードは、ユーザーの家庭でも電気がオフになっているときには動作しません:-) – Anton

+1

ああ、まさに! :) OPの予想される動作に対応する信頼できる方法はありません。それは答えです! ;) –

0

次に、window.locationが変更されているかどうかを確認します。

+0

リダイレクトが完了したら場所が変更されたので遅すぎます –

0
window.onbeforeunload = function (e) { 
    if (document.location.href.indexOf('?x=hostname') > -1) { 
     e = e || window.event; 
     // For IE and Firefox prior to version 4 
     if (e) { 
      e.returnValue = 'Any unsaved work is going to loose!'; 
     } 
     // For Safari 
     return 'Any unsaved work is going to loose!'; 
} 
    }; 
0

を見つけるあなたはe.targetが

はまた別のものは、あなたは、あなたのコードを挿入します....

if (e.target != myATagsOrButtons){ のような何もしない行くのが良いと思われる場合e.target if isWorking変数をtrueに設定することができます。フォームに項目を入力した場合、フォームに項目を入力してから、フォームに入力した場合はナビゲートしても問題ありません。

<input type='text' onkeydown='isUpdating()'>次に、必ず更新を確認してください。

0

なぜあなたは、ユーザーが離れたドメインからナビゲートしているかどうかを確認し、ので、あなたの現在のページ内の任意のアンカーをクリックする場合は、イベントのバインドを解除でき、アラート

window.onbeforeunload = function (e) { 
    e = e || window.event; 
    // For IE and Firefox prior to version 4 
    if (e && window.location.indexOf("www.mysite.com") > -1) { 

     e.returnValue = 'Any unsaved work is going to loose!'; 
    } 
    // For Safari 
    return 'Any unsaved work is going to loose!'; 
}; 
+0

そして、それをコメントとして投稿してみませんか? :) –

+0

私はそれをやっていると思った。しかし、SOは、質問を改善するために、より多くの情報と提案を求めるためにコメントを使用すべきだと言います。とにかく、私は今私の答えを改善しています –