0

以下にこのスクリプトがあります。これにより、iFrameが無効になるのを防ぎますが、ページ上のすべてのリンクも強制終了されます。スクリプトがすべてのリンクを無効にしないようにするにはどうすればよいですか?

<script>
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
        if (prevent_bust > 0) {  
            prevent_bust -= 2  
            // 204 header response prevents redirect
            window.top.location = '/204-response'  
        }  
    }, 1)  
</script>

私が抱えている問題は、ここで説明されているとおりです:http ://slightlyparanoid.com/?p=11

4

2 に答える 2

1

編集:フレームバストにこのアプローチを使用している理由はありますか? 一般的に受け入れられているアプローチは比較することですがself === top、これがアンカータグを壊す可能性は非常に低いです:

if (self !== top) {
    // this script is running in an iframe
} else {
    // this script is not running in an iframe
}

これはIEに影響を与える可能性が最も高いです(docs):

  • 別のドキュメントを参照しているアンカーをクリックします。
  • anchor.click メソッドを呼び出します。

アンカー タグのクリックを妨げずにイベントを続行できるようにするにはonbeforeunload、そこから戻る必要がありますundefined

window.onbeforeunload = function() { 
    prevent_bust++; 
    return undefined; 
};

明確にするためにonbeforeunload、ハンドラーから文字列が返されることを期待しており、それが確認ボックスにスローされます。を返すundefinedと、これをバイパスしてunloadイベントを続行します。

于 2012-07-27T18:19:05.217 に答える