この 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 の document.domain を親ページと一致するように明示的に設定できます。
これを書いた後、iframe コンテンツを動的に記述する必要があることがわかりますが、このページは window.open();
のように個別にポップアップします。
これはなぜでしょうか? これは IE シリーズのバグでもあります。つまり、親ページには
のようなページ
ただし、親ページの
これで問題は解決しました。
疑似プロトコルでこの問題を解決できますが、絶対に必要な場合を除き、この方法を安易に使用しないでください。