web-dev-qa-db-ja.com

iframe内のすべてのリンクを新しいタブで開く方法

_<iframe>_のリンクをクリックすると、_<iframe>_ではなく新しいタブでリンクが開くようにしています。私は、人々が_<iframe>_を通じて視聴しているコンテンツを制御できないことに注意してください。

$('a').setAttribute('target','_blank');のように、JavaScriptを使用してこれを実行しようとしていますが、うまくいきません。 HTMLドキュメントにも_<base target="_blank">_が含まれていますが、これもトリックではありません。

これは不可能ですか?それとも間違った場所で検索しているだけですか?前もって感謝します!

13
Darryl Huffman

私はこれを期待します:

$('a').setAttribute('target','_blank');

..失敗する(サイレント-jqueryは通常、黙って失敗するため)。なぜなら、iFrameのコンテンツが別のドメインからのものである場合、それを含むページからiFrame内のページを操作する際にアクセスの問題があるためです。

つまり、自分のページがドメインa(例:mysite.com)からのものであり、iframeがドメインb(例:someothersite.com)のものである場合、Webブラウザーのセキュリティ動作では、JavaScriptを使用してiFrameコンテンツを操作し、 「アクセスが拒否されました」エラー。

Jquery以外のJavaScriptを使用すると、エラーが表示されます。親ページから、これのようなもの:

window.frames["iFrameName"].getElementsByTagName("a")[0].target="_blank"

エラーが表示されます。

残念ながら、これについて何ができるかわかりません。別のWebサイトを含めて1つのWebサイトを停止し、ロード後にコンテンツを変更して別のWebサイトを表示することは、意図的なことです。

これを回避する1つの方法は、サーバー(つまり、同じドメイン)でスクリプトを呼び出し、URLを渡すことです。スクリプトは、あなたが探していたページのコンテンツを取得し、それをブラウザーに逆流させるので、目的のWebページのコンテンツを取得できますが、そのアドレスはサイト内にあります。たとえば、phpの場合:

http://yourdomain.com/getURL.php?url=http:www.google.com

ただし、認証の問題に注意してください

9
user2808054

親ウィンドウのページにあるすべてのリンクをロードするには、次を使用します。

<base target="_parent" />

それ以外の場合は、新しいウィンドウを使用します。

<base target="_blank" />
17
ronish

javaScriptを使用

var links= document.getElementsByTagName('a');
for (var i=0; i<links.length; i++){
   links[i].setAttribute('target', '_top');
}

jqueryの使用

$('a').each(function() {
   var a = new RegExp('/' + window.location.Host + '/');
   if (!a.test(this.href)) {
       $(this).attr("target","_top");
   }
});
2
Ratan Paul

この解決策を確認してください: iframe内のリンクを新しいウィンドウで開く

または、parent.window.open( "{{your location}}");を試すことができます。

1
Liad Livnat

_target='blank'_をonclick='window.open();'に置き換えます

1
alice

SetAttributeの代わりに$('a').attr('target','_blank');を使用してください...

[〜#〜] fiddle [〜#〜]

0
Karim AG