12

ダーティフラグが設定されたら、ユーザーがページを離れたいと確信しているかどうかを確認したいシステムがあります。

私は次のコードを使用しています - FireFox では、FireBug を介してページ ソースを確認でき、タグには onbeforeunload 属性が正しく挿入されています。

ただし、Chrome と FireFox ではこれは発生せず、警告なしでページから移動できます。body タグを更新する jQuery 行は確実に実行されていますが、実行していないだけです。

if ($("body").attr('onbeforeunload') == null) {
    if (window.event) {
        // IE and Chrome use this
        $("body").attr('onbeforeunload', 'CatchLeavePage(event)');
    }
    else {
        // Firefox uses this
        $("body").attr('onbeforeunload', 'return false;CatchLeavePage(event)');
    }
}

ここから先に進む方法はありますか?

4

5 に答える 5

17

false を返してページのアンロードを中止することはできません。メッセージボックスでユーザーに表示される文字列を返す必要があり、ユーザーはページを離れるか、ページにとどまるかを決定します(「OK」または「キャンセル」ボタンのいずれかを選択することにより)。したがって、次のようなコードを記述する必要がありますこれ:

 window.onbeforeunload = function() {
    return "Are you sure you want to leave this page bla bla bla?"; // you can make this dynamic, ofcourse...
 };
于 2009-11-26T10:54:07.727 に答える
8

これを試して

  <script type=\"text/javascript\">
        var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation
        var leave_message = 'You sure you want to leave?'
        function goodbye(e) 
        {
            if(dont_confirm_leave!==1)
            {
                if(!e) e = window.event;
                //e.cancelBubble is supported by IE - this will kill the bubbling process.
                e.cancelBubble = true;
                e.returnValue = leave_message;
                //e.stopPropagation works in Firefox.
                if (e.stopPropagation) 
                {
                    e.stopPropagation();
                    e.preventDefault();
                }

                //return works for Chrome and Safari
                return leave_message;
            }
        }   
    window.onbeforeunload=goodbye;
    </script>
于 2010-10-28T23:12:25.113 に答える
3
window.onbeforeunload = function () { return 'Are you sure?' };
于 2009-11-26T10:55:18.410 に答える