ホームページ >ウェブフロントエンド >jsチュートリアル >擬似プロトコル JavaScript スキルを使用して親ページと iframe ページ間の通信の問題を解決する

擬似プロトコル JavaScript スキルを使用して親ページと iframe ページ間の通信の問題を解決する

WBOY
WBOYオリジナル
2016-05-16 16:05:461249ブラウズ

など、親ページや iframe ページに対して操作を行うことがよくあります。

939370b3c8787d52ac84eef51d6f9a93065276f04003e4622c4fe6b64f465b88

この iframe 内のコンテンツは js で書かれています。次のコードのような

var iframe = document.getElementById("iframe"),
  doc = iframe.contentWindow.document;
doc.open();
doc.write("---------something------");
doc.close();

上記のコードはほとんどの場合正しいです。ただし、親ページが document.domain = "xxx";

と明示的に記述する状況があります。

IE系(IE10では試していない)では、権限が無いエラーが発生します。 Firefox、Chromeでは問題ありません。

これはなぜですか? これは IE のバグです。つまり、親ページが document.domain を明示的に設定していない場合、iframe はデフォルトで親ページと同じ document.domain になります。

です

location.host、親ページと子ページは通信できます。つまり、記事ヘッダーの例ですが、親ページが明示的に document.domain="" を設定する場合、iframe 内のページも明示的に document.domain を設定する必要があります。 = "xxx"、それ以外の場合は

iframe.contentWindow.document を取得する権限がない場合、コンテンツを動的に書き込むことはできません。実際、このページで明示的に document.domain= を指定することもできます。 xxx」を参照し、記事を通して開始する広場

ですが、問題は、親ページにそのような iframe が多数あり、その数が不明 (すべて広告スペースである) ため、特定のページを通過できないことです。

この場合、解決策がないようです

1. 親ページが設定されており、document.domain

を明示的に設定する必要があります。

2. iframe ページのコンテンツは js によって動的に生成される必要があります。

3. iframe に src を設定する機会がありません。

しかし、上記の 3 つの条件が満たされれば、この種の問題は擬似プロトコルによって解決できます。

コードをコピーします コードは次のとおりです:

iframe.src="javascript:void((function(){var d=document;d.open();d.domain='xxx;d.write('---something');d.close()} )())";

このようにして、iframe の document.domain を親ページと一致するように明示的に設定できます。

これを書いた後、iframe コンテンツを動的に記述する必要があることがわかりますが、このページは window.open();
のように個別にポップアップします。 これはなぜでしょうか? これは IE シリーズのバグでもあります。つまり、親ページには 5d43740c2c81c12a30358e8bd80a5b616f6cb83b34cb7f2d6a4aed109317b73a があり、iframe の疑似プロトコルを通じて書き込まれたコンテンツは新しいポップアップを表示します。 window.open、
のようなページ ただし、親ページの dde6fb694e6711ae5e6f381704c04ae4 は _self である必要があるため、iframe.src を呼び出す前に、base のターゲットを _blank

に設定する必要があります。

これで問題は解決しました。

疑似プロトコルでこの問題を解決できますが、絶対に必要な場合を除き、この方法を安易に使用しないでください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。