6

私はフレームバスティングバスター(名前の由来はhehe)に取り組んでいます。これにより、ユーザーは自分のページにとどまり、ターゲットURLで新しいウィンドウが開きます。ライトボックススクリプトを使用してiframeを表示しています。これは、私が行っていることです。

1)すべての.lightboxクリックのイベントを追加しました。fe:

$('.lightbox').live("click", function(e) { 
  e.preventDefault(); 
  $('#redirectURL').val($(this).attr('href')); 
  $(this).lightbox(); 
}

2)フレームバスティングバスターを追加しました:

<script type="text/javascript">
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
      if (prevent_bust > 0) {  
        prevent_bust -= 2  
        window.top.location = 'http://server-which-responds-with-204.com'  
      }  
    }, 1)  
</script>

3)私のニーズに合うようにフレームバスティングバスターコードを変更しました:

  • iframeがwindow.top.locationを変更したいかどうかを検出します
  • その場合は、204サーバーの応答を使用してこれが発生しないようにします
  • 新しいページを開く:window.open( $('#redirectURL', '_blank' );
  • ライトボックスを閉じる:$('.jquery-lightbox-button-close').click();

これまでのところ、これは私が思いついたものです:

var prevent_bust = 0  
window.onbeforeunload = function() { prevent_bust++ }  
setInterval(function() {  
  if (prevent_bust > 0) {  
    prevent_bust -= 2;
    redirectURL = $('#redirectURL').val();
    if(redirectURL != "") {
        window.top.location = 'http://www.****.com/ajax/nocontent.php';
        window.open(redirectURL, "_blank");
        $('.jquery-lightbox-button-close').click();
        $('#redirectURL').val('');
    } else {
        window.top.location = 'http://www.****.com/ajax/nocontent.php';
    }
  }  
}, 1); 

// 編集:Before I forget, 'nocontent.php' is a file that returns a 204 header

Firefoxの場合、プログラムしたとおりに動作します。window.top.locationで変更が検出されると、新しいフレーム/ページが開き、iframeが一番上の場所を再読み込みして切り上げるのを防ぎ、jQueryライトボックスを閉じます。

Safari / Chromeも同様に動作し、新しいブラウザ画面を開きます(not sure if theres an option to say target="_newtab" or something?)。唯一の悪い点は、ポップアップがブロックされているというメッセージが実際に表示されないことですが、ページへのリンクを含むポップアップバルーンをWebサイトに表示することで回避できます。

Internet Explorerは、なんと衝撃的なのか、残った唯一の黒い羊です。IEは新しいポップアップを開かず、iFrameによってリセットされたwindow.top.locationをブロックせず、ページ全体を「#targetURL」に更新し続けます。これはデフォルトのバスティングコードでも同じです。したがって、私の編集の一部が原因ではありません。

私のコードの間違いを見つけることができる人はいますか?

また、リクエストがiframeによって行われたのか、ユーザー自身によって行われたのかを確認するための少しの変更が必要になります。これは、ユーザーがツールバーのアドレスを変更したり、をクリックしてページを離れたりするオプションが実際にはないためです。リンク、これは本当に必要ではありませんLOL。

前もって感謝します。

4

2 に答える 2

5

PENDO、私はあなたが説明したプロセス全体、ligthbox-jquery、独自のコードのjavascriptをシミュレートし、ライトボックスを介してページを開くことを制御しようとしました。まったくシミュレートできませんでした。時間がなくなると、可能性と解決策の範囲を広げるための提案を送信します。リダイレクトページを置き換えることをお勧めします:

 ...
  redirectUrl = $ ('# redirectUrl'). val ();
 ...
 window.top.location = 'http://www .****. with / ajax / nocontent.php';
 window.open (redirectUrl, "_blank");

ajax呼び出しを使用してコンテンツを取得し、DIVのコンテンツを上書きして、ページをシミュレートするDIVコンテナーに置き換えられました。

 ...
 $.post(redirectoURL /* or desired URL */, function(data) {
     $('DIV.simulateContent').html(data);
 });
 ...

また

 ...
 $('DIV.simulateContent').load(redirectoURL);
 ...

このアプローチは、ユーザーがアドレスバーを使用してページを離れることさえできないという問題も回避します(あなた自身が述べたように)。

申し訳ありませんが、完全な解決策を提供させていただきますが、時間が足りませんでした。

PENDO、問題の代替案についてもう少し作業しましたが、カスタムウィンドウ(iframe、html、インラインajaxなど)を操作するためのカスタマイズ可能なjQueryライトボックスプラグインを見つけました。多分それは役立つでしょう。次のリンク:

 http://jacklmoore.com/colorbox/
于 2011-10-08T11:11:25.220 に答える
0

IEのiframeでJavaScriptを実行する必要がない場合は、iframeセキュリティ属性を設定できます。

<iframe security="restricted" src="http://domain.com" />

http://msdn.microsoft.com/en-us/library/ms534622(v=VS.85).aspx

于 2011-10-07T22:14:07.373 に答える