“アクセスが拒否されました” iframeドキュメントオブジェクトへのアクセスエラー

StackOverflow https://stackoverflow.com/questions/151362

  •  02-07-2019
  •  | 
  •  

質問

多くのパラメータを持つフォームにAJAXフォームを投稿するには、 iframe を作成し、POSTでフォームを投稿してから iframe のコンテンツ。 具体的には、次のようなコンテンツにアクセスしています:

$("some_iframe_id").get(0).contentWindow.document

私はそれをテストし、うまくいった。

一部のページで、「アクセスが拒否されました」というメッセージが表示され始めました。エラー。私の知る限り、iframeが同じドメインから提供される場合、これは起こりません。

以前は機能していたと確信しています。誰にも手がかりがありますか?

十分に明確でない場合:同じドメインに投稿しています。したがって、これはクロスドメインリクエストではありません。 IEでのみテストしています。

PS単純なajax POSTクエリを使用できません(質問しないでください)

役に立ちましたか?

解決

自分で解決しました!

問題は、正しい応答が送信されていても(Fiddlerで検証済み)、HTTP 200エラーコード(200ではなく)で送信されていたことでした。

したがって、応答がエラーコードで送信された場合、IEは iframe の内容をディスクからロードされたエラーメッセージ( res:// ieframe .dll / http_500.htm )、これによりクロスドメインアクセス拒否エラーが発生します。

他のヒント

クロスドメイン制限(別名CORS)など、 iFrames に関連するセキュリティ制限に注意してください。以下は、CORSに関連する3つの一般的なエラーです。

  1. 別のドメインでiFrameをロードします。 (例:トップフレームが" www.ooof.com "で" www.foo.com "を開く)

  2. 別のポートでiFrameをロードします。iFrameのURL port はトップフレームのURLとは異なります。

  3. 異なるプロトコル:親フレームがHTTPを使用している間にHTTPS経由でiFrameリソースをロードします。

私の問題は、 X-Frame-Options HTTPヘッダーでした。私のApache構成では次のように設定されています:

Header always append X-Frame-Options DENY

これを削除すると機能しました。特に私の場合、IE 9およびIE 10でファイルをアップロードするためにjQueryファイルアップロードプラグインとjQueryのiframeトランスポートを使用していました。

この質問は非常に古いことを知っていますが、上記の答えが私にとってはうまくいったことを言及したかったです:document.domainを各ページ(親ページとiframeページ)で同じに設定します。しかし、私の検索では、この興味深い記事を見つけました:

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

src = 'javascript:void(0)' のiframeがある場合、 frame.document.location = ... のようなJavaScriptはAccessで失敗しますIEでエラーが拒否されました。ターゲットフレームと対話するjavascriptライブラリを使用していました。フレームを変更しようとしていた場所が親と同じドメイン上にあったにもかかわらず、iframeは最初にjavascript:voidに設定され、クロスドメインアクセス拒否エラーがトリガーされました。

これを解決するために、私は自分のサイトにblank.htmlページを作成し、javascriptで変更されるまで最初は空白であるiframeを事前に宣言する必要がある場合は、 src = '/ content / blank.html' は同じドメインにあります。

代わりに、javascriptを使用してiframeを完全に作成して、作成時にsrcを設定することもできますが、私の場合は、ページで既に宣言されているiframeを必要とするライブラリを使用していました。

基本的に、このエラーは、フレーム内のドキュメントとiiの外部にあるドメインが異なる場合に発生します。そのため、クロスサイドスクリプティングブラウザがこのような実行を無効にするのを防ぐために。

www.foo.comがwww.api.foo.comにリクエストを送信するなど、ドメインの問題(またはサブドメイン)の場合

各ページで設定できます

document.domain = www.foo.com

「クロスドメイン」を許可するには権限

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top