6

ポップアップを使用せずに location.href のようなコード (通常は私のものではない) を停止する JS 外部スクリプト (タグ) を作成したいと考えています。私は次のようなことを試しました:

$(window).bind('beforeunload', function() {
 window.stop();
 event.stopImmediatePropagation();
 event.preventDefault();
 location.href = '#';  
 });

しかし、何も役に立たないようでした。繰り返しますが、return "are you sure?" を使用せずにそれが必要です。多分別のコールバック?

ありがとう、ダン

4

2 に答える 2

1

移動を確認するために使用する正しい方法onbeforeunloadは、表示したいメッセージの文字列を返すことです。MDN はこう言います。

関数は文字列値を Event オブジェクトの returnValue プロパティに割り当て、同じ文字列を返す必要があります。

したがって、onbeforeunload要求する動作の関数は次のようになります(特にonbeforeunloadは他のイベントのように複数のイベントリスナーをサポートしていないため、jqueryでバインドするのと同じです)

window.onbeforeunload = function() {
    return "Are you sure?";
};

しかし皮肉なことに、Firefox はセキュリティ上の理由からこれをサポートしていません。

Firefox 4 以降では、返された文字列がユーザーに表示されないことに注意してください。バグ 588292を参照してください。

編集:バグレポートをもっと読みました。この決定の主な理由は次のとおりです。「1.これはセキュリティ上の問題であるため、サイト提供のテキストを削除します(ブラウザダイアログの信頼できないテキスト)」。彼らはどのように感じているのだろうかalert

最近のほとんどのブラウザー (Chome、IE 9 以降、および Opera は確かに知っています) はonbeforeunload、表示用の文字列を返す以外の関数で実行しようとすることをすべて無視します。これは、ユーザーのブラウザーのハイジャック、ポップアップの表示、ユーザーを別のドメイン、可能性のある悪意のあるドメインに誘導することによるナビゲーション試行の無効化などを防ぐためです。

編集2:私は明らかに間違っていました。で許可されていないものはいくつかありonbeforeunloadますが、それらは主に、サンプル コードで試したものの種類であり、イベントの伝播とページ ナビゲーションに関係しています。その FF バグ レポートのコメントの奥深くから、ユーザー oyasumiがこのjsFiddleへのリンクを投稿し、カスタム テキストを FF 4+ ユーザーに表示するための回避策を示します: http://jsfiddle.net/ecmanaut/hQ3AQ/これは、「バグ」「修正」の元の理由であるブラウザ/アプリケーション/OS/公式に見えるダイアログにカスタムテキストを表示することを陽気に行っていますalert()onbeforeunload

于 2013-03-01T22:29:13.647 に答える
-1

「falseを返す」を使用しようとしましたか?また、イベントを関数に送信する必要があります。これは、ボタンのクリックとハイパーリンクを防ぐことができる例です

<input type="button" value="click me" />
<a href="www.google.com"> google </a>

$(document).ready(function(){
    $('input[type="button"]').click(function(e){
             e.preventDefault();
    });
    $('a').click(function(e){
        e.preventDefault();

    });
});

ここにリンクがありますhttp://jsfiddle.net/juTtG/143/

于 2013-02-28T20:30:08.793 に答える