0

長いメッセージが入力された場合にウィンドウを閉じるかどうかを確認する、単純な Greasemonkey スクリプトを作成中です。

数年前にこのスクリプトの動作するバージョンがありましたが、動作していた Web サイトが変更されたため、修正したいと考えています。ただし、簡単な動作確認すらできません。

function confirmClose() {
    return 'You have a long message typed. Are you sure you want to close?';
}

window.addEventListener('beforeunload', confirmClose, true);

スクリプトが必要なページで実行されていることは確かですが、ウィンドウを閉じようとすると、確認が得られません。

4

1 に答える 1

1

セキュリティ対策として、 Firefox ではページでダイアログのカスタム メッセージを設定できなくなりました。beforeunloadしたがって、returnステートメントは使用時に何の効果もありませんaddEventListener(これを使用する必要があります)。

preventDefault()ページのアンロードを停止するには、次のように使用する必要があります。

window.addEventListener ('beforeunload', confirmClose, false);

function confirmClose (zEvent) {
    zEvent.preventDefault ();
}

これにより、変更不可能なダイアログがスローされます。

標準のページ終了確認ダイアログ


カスタム メッセージを表示する場合は、次のような追加のダイアログを使用して表示できます。

window.addEventListener ('beforeunload', confirmClose, false);

function confirmClose (zEvent) {
    var doQuitPage = confirm (
        "You have a long message typed. Are you sure you want to close?"
    );
    if ( ! doQuitPage) {
        zEvent.preventDefault ();
    }
}

ただし、2 つの重要な煩わしさに注意してください。

  1. ユーザーが を押すOKと、ページは何もせずに終了します。
    ただし、ユーザーが を押すCancelと、Are you sureダイアログがポップアップし、ユーザーは引き続き を押す必要がありStay on Pageます。

  2. HTML5 仕様により、Firefox の将来のバージョンでは、イベントconfirm()中の許可が停止される可能性がありbeforeunloadます。

于 2012-12-24T02:46:24.503 に答える