69

ユーザーが終了ボタンを使用してウィンドウを閉じるのをブロックすることはできます[X]か? 私は実際に、ユーザーがウィンドウを閉じるための閉じるボタンをページに提供しています。基本的に、私がやろうとしているのは、ユーザーにフォームに入力して送信させることです。提出するまでウィンドウを閉じたくありません。

私はあなたのコメントに本当に感謝しています.私は商用ウェブサイトでホスティングするつもりはありません. これは内部的なものであり、実際には、私たちが設計したこの調査にすべてのスタッフを参加させています....

正しい方法ではないことはわかっていますが、ここで発生した問題の解決策があるかどうか疑問に思っていました...

4

8 に答える 8

132

を見てくださいonBeforeUnload

誰かを強制的に留まらせることはありませんが、本当に離れたいかどうかを尋ねるプロンプトが表示されます。これは、おそらく管理できる最高のクロスブラウザソリューションです。(回答の途中で終了しようとすると、このサイトと同様になります。)

<script language="JavaScript">
    window.onbeforeunload = confirmExit;
    function confirmExit() {
        return "You have attempted to leave this page. Are you sure?";
    }
</script>

編集:ほとんどのブラウザは、のカスタムメッセージを許可しなくなりましたonbeforeunload

2016年2月18日からのこのバグレポートを参照してください。

onbeforeunloadダイアログは、最新のWebでは次の2つの目的で使用されます。

  1. ユーザーが誤ってデータを失うのを防ぎます。
  2. 詐欺ユーザー。

前者を止めずに後者の使用を制限するために、Webページから提供された文字列を表示しません。代わりに、汎用文字列を使用します。

Firefoxはすでにこれを行っています[...]

于 2010-02-09T15:12:17.107 に答える
14

すべてのイベントのポップアップを表示したくない場合は、次のような条件を追加できます

window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (isAnyTaskInProgress) {
           return "Some task is in progress. Are you sure, you want to close?";
        }
    }

これは私にとってはうまくいきます

于 2015-07-15T07:27:22.520 に答える
10

ユーザーが ALT + F4 を押すか、タスク マネージャーから閉じたときに何をしますか

Cookie や DB で入力を完了しなかったかどうかを追跡し、次にアクセスしたときに同じ画面に戻るようにしてください...:ところで、このフォームへの入力が完了していません... "

もちろん、ドットコムが崩壊する前にいた場合は、ポルノの嵐を覚えているでしょう。ウィンドウを 1 つ閉じると、15 個のウィンドウが開きます。ウィンドウが閉じていることを検出するコードがありますが、ALT + F4 を 2 回押すとウィンドウが閉じます。子と親 (ポップアップの場合)

于 2010-02-09T15:01:04.620 に答える
6

これにより、ユーザーにメッセージを表示して、本当に閉じるか、そのままにするかを尋ねるダイアログが表示されます。

var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
    var e = e || window.event;
    if (e) {
        e.returnValue = message;
    }
    return message;
};

その後、フォームが送信される前に設定を解除するか、

window.onbeforeunload = null;

これは非常に煩わしいことを覚えておいてください。ユーザーに入力したくないフォームへの入力を強制しようとすると、失敗します。ユーザーはウィンドウを閉じる方法を見つけて、平均的なWebサイトに戻ることはありません。

于 2010-02-09T15:15:46.837 に答える
4

会社の従業員の100%の参加を必要とする内部調査を送信する場合は、フォームに応答者ID/ユーザー名/電子メールなどを追跡させるのがより良いルートです。数日ごとにちょっとしたものを送信してください。調査を完了するために組織内の人にリマインダーを電子メールで送信します...おそらくこれを自動化することもできます。

于 2010-02-09T15:17:11.687 に答える
4

どのようにそのことについて?

function internalHandler(e) {
    e.preventDefault(); // required in some browsers
    e.returnValue = ""; // required in some browsers
    return "Custom message to show to the user"; // only works in old browsers
}

if (window.addEventListener) {
    window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
    window.attachEvent('onbeforeunload', internalHandler);
}
于 2012-01-23T05:35:10.660 に答える
1

ユーザーが必ずしもやりたくないことをユーザーに強制するのはよくありません。ブラウザを閉じるのを本当に防ぐことはできません。

divただし、現在の Web ページに を作成して、残りのコントロールの上に重ねて、フォームだけがアクセスできるようにすることで、同様の効果を得ることができます。

于 2010-02-09T15:01:58.660 に答える
0

イベントを使用して、イベント ハンドラーwindow.oncloseで返すことができます。false

function closedWin() {
    confirm("close ?");
    return false; /* which will not allow to close the window */
}
if(window.addEventListener) {
     window.addEventListener("close", closedWin, false);
}

window.onclose = closedWin;

コードはこのサイトから取得されました。

一方、(タスクマネージャーまたはそれらの行の何かを使用して)強制的に終了した場合、それについては何もできません。

于 2010-02-09T14:59:09.910 に答える