2009-05-04 10 views
89

JavaScriptを使用してウェブページをナビゲートしないようにするにはどうすればよいですか?JavaScriptを使用してウェブページをナビゲートしないようにする

+0

? – Niyaz

+6

質問によると、JavaScriptはそれを離れてナビゲートします... – Shog9

+0

[このページから移動してもよろしいですか?変更が確定したとき?](http://stackoverflow.com/questions/1119289/how-to-show-the-are-you-sure-you-want-to-navigateaway-from-this-page-when- ch) –

答えて

107

あなただけがメッセージを表示することができますが、(それは遅すぎるので)それは、ナビゲーションを中断しません。ただし、onbeforeunloadを使用することができ、それがナビゲーション中断します:

window.onbeforeunload = function() { 
    return "Are you sure you want to navigate away?"; 
} 

編集を:これは期待通りに確認ウィンドウを引き起こしたが、また、最初の確認の結果と第二確認を示したとしてreturn文でconfirm()を削除。

+4

ブラウザに適切なプロンプトが表示されます。単に 'window.onbeforeunload = function(){return" "; } ' –

+0

しかしそれでは不十分です。フォーム内のコントロールはどうですか?彼らもこれを引き起こします。 – Fandango68

3

onunloadを使用してください。

はjQueryのために、私はこれがそうのように働くと思う:

$(window).unload(function() { 
    alert("Unloading"); 
    return falseIfYouWantToButBeCareful(); 
}); 
+0

ありがとうございます... –

+0

falseを返すと残念なことにアンロードはキャンセルされません - 直前に実行される(beforeandload)とは異なり、ユーザーがページを離れるときに 'unload'イベントが発生します – Jimbo

+0

@ altCognito:あなたは私に良いアイデアを与えましたfalseIfYouWantToButBeCareful() IEまたはFFで与えられるデフォルトのポップアップを避けることができます。 しかし、クロムについては機能しません。それを見る。 – user367134

6

アイマンの例では、あなたが閉じてから、ブラウザのウィンドウ/タブを防ぐfalseを返すことによって。 onunloadを使用して

window.onunload = function() { 
    alert('You are trying to leave.'); 
    return false; 
} 
+1

ありがとうございます... –

+1

ブラウザがOperaでない限り、タブ/ウィンドウ/プログラムが閉じられているときにonunloadイベントをスキップします。 – Powerlord

1

このエラーメッセージは、ブラウザに既に表示されているエラーメッセージと重複している可能性があります。クロムでは、2つの同様のエラーメッセージが同じウィンドウに次々に表示されます。

クロムでは、カスタムメッセージの後に表示されるテキストは「このページを終了しますか?」です。 Firefoxでは、私たちのカスタムエラーメッセージは表示されません(ただしダイアログは表示されます)。

より適切なエラーメッセージは次のようになります。

window.onbeforeunload = function() { 
    return "If you leave this page, you will lose any unsaved changes."; 
} 

またはstackoverflowのスタイル:「あなたは記事を書いたり編集を開始しました。」

18

ここに示す他の方法とは異なり、このコードはではありません。は、ブラウザに警告メッセージを表示して、ユーザーに退室したいかどうかを尋ねます。代わりに、ブラウザがメモリからそれをアンロードする機会を得る前に、DOMのイベントの性質を利用して現在のページにリダイレクトします(したがってナビゲーションをキャンセルします)。

ナビゲーションを直接短絡することで機能するため、ページを閉じられないようにすることはできません。ただし、フレームバストを無効にするために使用できます。

(function() { 
    var location = window.document.location; 

    var preventNavigation = function() { 
     var originalHashValue = location.hash; 

     window.setTimeout(function() { 
      location.hash = 'preventNavigation' + ~~ (9999 * Math.random()); 
      location.hash = originalHashValue; 
     }, 0); 
    }; 

    window.addEventListener('beforeunload', preventNavigation, false); 
    window.addEventListener('unload', preventNavigation, false); 
})(); 

免責事項:あなたがこれを行うべきではありません。ページにフレームバスターコードがある場合は、著者の希望を尊重してください。

+0

ユーザーが閉じるブラウザを希望する場合はどのようにモーダルを表示しますか(閉じるをクリックしますか?)それは本当ですか? –

11

私はこのわずかに異なるバージョンになってしまった:フォームが汚れますときに私はtrueにダーティフラグを設定(または私はそう離れてナビゲートしないようにしたい)他の場所で

var dirty = false; 
window.onbeforeunload = function() { 
    return dirty ? "If you leave this page you will lose your unsaved changes." : null; 
} 

。これにより、ユーザーがConfirm Navigationプロンプトを表示するかどうかを簡単に制御できます。

enter image description here

+0

IEでは、dirtyがfalseの場合、文字列 'null'が表示されます。 if文の中に入れてください。参照してください:http://stackoverflow.com/questions/11793996/onbeforeunload-handler-says-null-in-ie –

3

同等のjQuery 1.11で受け入れ答えに:あなたは冗長なプロンプトを参照してください選択した回答のテキストで

$(window).on("beforeunload", function() { 
    return "Please don't leave me!"; 
}); 

JSFiddle example

altCognitoの答えは使用unloadイベント。JavaScriptがナビゲートを中止するには遅すぎます。

2

最新のaddEventListener APIを使用して、より現代的でブラウザに対応した同等の方法です。

window.addEventListener("beforeunload", function (e) { 
    var confirmationMessage = "\o/"; 

    e.returnValue = confirmationMessage;  // Gecko and Trident 
    return confirmationMessage;    // Gecko and WebKit 
}); 

出典:https://developer.mozilla.org/en-US/docs/Web/Events/beforeunloadこのページから移動になり何

+0

これは良い解決策です。 –

関連する問題