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

WBOY
リリース: 2016-05-16 16:05:46
オリジナル
1236 人が閲覧しました

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

この 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 シリーズのバグでもあります。つまり、親ページには があり、iframe の疑似プロトコルを通じて書き込まれたコンテンツは新しいポップアップを表示します。 window.open、
のようなページ ただし、親ページの は _self である必要があるため、iframe.src を呼び出す前に、base のターゲットを _blank

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

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート