web-dev-qa-db-ja.com

ユーザーがjavascriptでウィンドウを閉じるのをブロックする方法は?

終了ボタン[X]を使用してユーザーがウィンドウを閉じるのをブロックすることは可能ですか?私は実際にユーザーがウィンドウを閉じるためにページに閉じるボタンを提供しています基本的に私がやろうとしているのはユーザーにフォームを埋めて送信するように強制することです。送信するまでウィンドウを閉じてほしくない。

皆さんのコメントに感謝します。商用ウェブサイトでのホスティングは考えていません。内部のものです。実際、すべてのスタッフにこの調査に参加してもらっています。私たちがここで得た問題の解決策があるかどうか疑問に思っていました...

43
manraj82

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はすでにこれを行っています[...]

90
Pool

ユーザーがALT + F4を押すか、タスクマネージャーから閉じるとどうなりますか

CookieまたはDBでそれを完了しなかった場合、そして次回訪問したときに同じ画面を戻すだけで追跡してみませんか...:ところで、このフォームに記入し終わっていない... 」

もちろん、ドットコムバストの前にいた場合は、ポルノストームを覚えているでしょう。1つのウィンドウを閉じると、15人が他の人が開きます。子と親(ポップアップの場合)

8
SQLMenace

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

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

これは私のためにうまくいきます

7
Imam

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

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;

これは極端に迷惑であることに注意してください。ユーザーに記入したくないフォームに記入するように強制しようとすると、失敗します。ウィンドウを閉じて、意地悪なウェブサイトに二度と戻らない方法。

2
Gipsy King

会社の従業員の100%の参加が必要な内部調査を送信する場合は、フォームにレスポンダーのID /ユーザー名/メールなどを追跡してもらうことをお勧めします。組織の関係者にメールでリマインダーを送信して調査を完了してください。おそらくこれを自動化することもできます。

2
John Lechowicz

ユーザーが必ずしもしたくないことを強制的に実行するのは悪い習慣です。ブラウザを閉じるのを実際に防ぐことはできません。

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

2
Jonathon Faust

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

function internalHandler(e) {
    return "Please don't leave our page ever!";
}

if (window.addEventListener) {
    window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
    window.attachEvent('onbeforeunload', internalHandler);
}
1
alun

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;

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

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

0
jpabluz