10

次のようなコードを使用して、メイン ページからポップアップを開きます。

<a href="http://external.domain.tld/"
   onclick="window.open(this.href, '_blank', 
       'width=512,height=512,left=200,top=100');return false">
 Open popup
</a>

これは正常に動作しますが、私の問題は、ポップアップ ウィンドウに読み込まれたドキュメントに、オープナー ウィンドウの場所を変更する権限があることです。これは、ポップアップ内のドキュメントが別のドメインのものであっても機能します。場所を読み取る権限はありませんが、場所を変更することは許可されています。私はそれをしたくありません。ポップアップをメイン ページから完全に切り離したい。

JavaScript がなくても動作しません。属性を使用して新しいタブで他のページを開くと、target="_blank"このタブは引き続きopenerウィンドウに移動してその場所を変更できます。

<a href="http://external.domain.tld/" target="_blank">
  Open in new tab
</a>

これは、許可されるべきではない開かれたドキュメント内のコードです:

<script>
  opener.location.href = "http://badsite.tld/";
</script>

ここでライブデモを見ることができます。2 つのリンクのいずれかをクリックして、ポップアップまたは新しいタブで別のページを開き、オープナー ウィンドウに 3 番目のページを読み込みます。それを防ごうとしています。

オープナーウィンドウと開いたウィンドウの間の接続を切断するために使用できるトリックはありますか? 理想的には、開かれたウィンドウは、他のウィンドウによって開かれたことをまったく認識しないようにする必要があります。

4

2 に答える 2

18

子ウィンドウのページがコントロール内にある場合、子ページのオープナーに null を割り当てることができます。

window.opener = null;

これを JavaScript の最初のステートメントとして作成します。

ページが自分の管理下にない場合、または別のドメインにある場合は、開いているときに次の操作を行います。

popup = window.open(this.href, '_blank', 'width=512,height=512,left=200,top=100');
popup.opener = null;
于 2013-08-08T08:49:36.337 に答える
2

ドキュメントから:

一部のブラウザーでは、元のアンカー タグの rel="noopener" 属性により、window.opener 参照が設定されなくなります。

サポートされているすべてのブラウザーを参照してください: https://caniuse.com/#search=noopener

また、古いブラウザの場合は no-referrer を使用してください: https://mathiasbynens.github.io/rel-noopener/

したがって、rel="noreferrer noopener"使用している場所ならどこでも修正できますtarget="_blank"

于 2018-02-02T17:13:35.340 に答える