2013-02-28 4 views
6

ポップアップを使わずにlocation.hrefのようなコード(通常は私のものではない)を停止するJS外部スクリプト(タグ)をビルドしたいと思います。 私はのようなものを試してみました:ポップアップなしでJS location.hrefを停止できますか?

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

が、何も役立つように見えません。 もう一度、私はそれを必要としません:返信 "あなたは本当ですか?" 多分別のコールバックですか?

おかげで、 ダン

+1

できません。ユーザーの入力がなくてもナビゲーションを停止できると、ブラウジングの仕方が損なわれます。 – jbabey

+0

私は同じ感情を持っています。 Firefoxの例では、セキュリティ上の理由から意図的にwindow.location.hrefのオーバーライドをブロックしています。 [bugzillaのこのバグ](https://bugzilla.mozilla.org/show_bug.cgi?id=736694)を参照してください。 – kamituel

+0

実際は可能です。それ以外の場合は、 "変更を残して変更を失う"かどうかを尋ねるサイトは存在しません。 beforeunloadイベントが存在し、サーフィンしなくてもウィンドウを閉じてもキャッチします。 – Alfabravo

答えて

-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(); 

    }); 
}); 

で離れて航行を確認するためにonbeforeunloadを使用するhttp://jsfiddle.net/juTtG/143/

+1

のjQuery呼び出しの戻り値は、JQuery John Resigの作成者(http://www.mail-archive.com/[email protected])の説明に従って、e.preventDefault()とe.stopPropagation()の両方を呼び出すようなものです。 .com/msg71371.htmlとhttp://jquery.10927.n7.nabble.com/Any-benefit-to-using-event-preventDefault-over-quot-return-false-quot-to-cancel-out-an -href-click-td102980.html –

+0

この場合「オフライン」なしでfalseを返すと、ポップアップに「return flase」と表示されますが、それは異常ですが、これが起こります。そして、私は入力ボタンやhrefを持っていないので、私はlocation.href = 'url'を行うJSメソッドを呼び出すFlash(私のものではない)を持っています。しかし、方向性のおかげで –

+0

は申し訳ありません返品虚偽は残っていた – Nir

1

正しい方法はただの文字列を返すことですリンクありメッセージを表示します。 MDN has this to say

機能は、それで、あなたが求める行動のためのあなたのonbeforeunload機能だけで(それを結合と同じになりEventオブジェクトののReturnValueプロパティに文字列値を代入して、同じ文字列に

を返す必要がありますjQueryを使って、他のイベントが行うようにonbeforeunloadは、複数のイベントリスナーをサポートしていない、特に以来)

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

しかし皮肉なことに、Firefoxはセキュリティ上の目的のためにこの機能をサポートしていません。

Firefox 4以降では、返された文字列はユーザ​​ーに表示されません。 bug 588292を参照してください。

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

ほとんどの最新のブラウザ(Chome、IE 9+以前、Opera、私は確信しています)は、表示する文字列を返す以外に、onbeforeunload関数で何をしようとしているのか無視します。これは、ユーザーのブラウザをハイジャックすること、ポップアップを開くこと、ユーザーに別の悪意のあるドメインなどを指すことによってナビゲーションの試行を無効にすることです。 のものはonbeforeunloadで許可されていませんが、イベントの伝播やページの移動に関連して、サンプルコードで試したことが主なものです。そのFFバグレポートのdeep in the commentsから、ユーザーoyasumiは、FF 4以上のユーザーにカスタムテキストを表示するための回避策を使ってこのjsFiddleへのリンクを投稿します:http://jsfiddle.net/ecmanaut/hQ3AQ/alert()を呼び出すことは明らかです。onbeforeunloadでも明らかです。ブラウザ/アプリケーション/ OS /公式の見た目のダイアログにカスタムテキストを表示するという「バグ」の「修正」の元々の理由でした。

関連する問題