151

JavaScript を使用して Web ページが離れないようにするにはどうすればよいですか?

4

10 に答える 10

190

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

window.onbeforeunload = function() {
  return "";
}

注: 新しいブラウザーでは、上書きできない「保存されていない変更は失われます」などのメッセージが表示されるため、空の文字列が返されます。

古いブラウザーでは、プロンプトに表示するメッセージを指定できました。

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}
于 2009-05-04T18:06:41.147 に答える
19

最新の addEventListener API を使用して、より最新のブラウザ互換の方法で同等のもの。

window.addEventListener('beforeunload', (event) => {
  // Cancel the event as stated by the standard.
  event.preventDefault();
  // Chrome requires returnValue to be set.
  event.returnValue = '';
});

ソース: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

于 2015-10-20T15:14:32.447 に答える
15

私はこのわずかに異なるバージョンになりました:

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

他の場所では、フォームがダーティになったときにダーティ フラグを true に設定します (または、別の場所に移動しないようにしたい場合)。これにより、ユーザーがナビゲーションの確認プロンプトを受け取るかどうかを簡単に制御できます。

選択した回答のテキストを使用すると、冗長なプロンプトが表示されます。

ここに画像の説明を入力

于 2014-03-19T04:03:23.603 に答える
7

Aymanの例では、falseを返すことにより、ブラウザのウィンドウ/タブが閉じないようにします。

window.onunload = function () {
  alert('You are trying to leave.');
  return false;
}
于 2009-05-04T17:27:41.770 に答える
6

jQuery 1.11 で受け入れられた回答に相当するもの:

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

JSFiddle の例

altCognito の回答ではunloadイベントが使用されましたが、これは JavaScript がナビゲーションを中止するには遅すぎます。

于 2015-07-14T12:25:21.753 に答える
3

onunloadを使用します。

jQueryの場合、これは次のように機能すると思います。

$(window).unload(function() { 
  alert("Unloading"); 
  return falseIfYouWantToButBeCareful();
});
于 2009-05-04T17:21:46.150 に答える
3

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

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

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

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

または、stackoverflow スタイル: 「投稿の作成または編集を開始しました。」

于 2012-10-11T17:55:29.173 に答える
0

終了時に状態を通知なしに戻す必要がある場合は、次の行を使用します。

window.onbeforeunload = null;
于 2021-09-01T13:38:09.173 に答える