10

が変更されabout:blankたときに IE のページに iframeを作成するための回避策を知っている人はいますか?document.domain

document.domainプロパティが変更された後、IE は空/動的 iframe へのアクセスを許可していないようです。

たとえば、iframe を動的に作成し、そこに html を挿入するとします。

// Somewhere else, some 3rd party code changes the domain 
// from something.foo.com to foo.com 
document.domain = 'jshell.net';

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

// In IE, we can't access the iframe's contentWindow! Access is denied.
iframe.contentWindow.document.body.style.backgroundColor = 'red';

jsfiddle の実際の例を次に示します: http://jsfiddle.net/XHkUT/

FF/Webkit では問題なく動作しますが、IE では動作しません。これは、プロパティが変更された後に作成された iframe に影響するため (上記の例のように)、特にイライラします。document.domain

IE のルールは「変更後に動的/空の iframe を作成すると、document.domainその DOM にアクセスできなくなる」のようです。

iframesrcabout:blank javascript:void(0)またはjavascript:""に設定できませんでした。

4

3 に答える 3

5

iframeのドメインをに変更してよろしいですか?以下はIE7,9で(私にとって)動作します

document.domain = 'jshell.net';

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.src = "javascript:document.write('<script>document.domain=\"jshell.net\"</script>')";

// Now write some content to the iframe
iframe.contentWindow.document.write('<html><body><p>Hello world</p></body></html>');

編集:これがページ上のインラインスクリプトである場合は、終了</script>タグを分割する必要があります。理由を見る-スクリプトタグを分割する

于 2013-02-14T11:56:31.070 に答える
0

私は常に、iframeのsrcを親のドメインと同じドメインにある空のファイルに設定することで、このような問題を回避してきました。でそのようなファイルを作成できる場合はjshell.net、次のようなものをお勧めします。

var iframe = document.createElement('iframe');
iframe.src = 'http://jshell.net/blank.html';
document.body.appendChild(iframe);

blank.htmlたとえば、小さな定型文が含まれている場合:

<html><head><title>about:blank</title><head><body></body></html>
于 2013-02-11T18:06:56.877 に答える
0

iframe.src と document.location が異なるドメイン (またはサブドメイン) にある場合、定義上、親から子へのアクセス権はありません。ただし、子から親へはアクセスできます。クロスドメイン JavaScript をロードするときに使用される手法の 1 つは、iframe がロード時にコンテナー ウィンドウ内のメソッドを呼び出すことができるという事実を利用することです。

2 つのドキュメントが異なるサブドメインにある場合にのみ、document.domain を微調整して iframe.src のドメインと一致させ、アクセスを有効にすることができます。

同一オリジン ポリシーの詳細については、こちらをご覧ください。

http://en.wikipedia.org/wiki/Same_origin_policy

http://softwareas.com/cross-domain-communication-with-iframes

于 2013-02-14T09:24:50.343 に答える