AJAXフォームに多くのパラメータを持つフォームを投稿するために、私はiframe
を作成し、POSTでフォームを投稿し、iframe
のコンテンツ、具体的には、次のようにコンテンツにアクセスしています。
$("some_iframe_id").get(0).contentWindow.document
私はそれをテストし、機能しました。
一部のページで、「アクセスが拒否されました」というエラーが表示され始めました。私の知る限り、同じドメインからiframeが提供される場合、これは起こりません。
以前は機能していたと確信しています。誰にも手がかりがありますか?
十分に明確でない場合:同じドメインに投稿しています。したがって、これはクロスドメインリクエストではありません。私はIEのみでテストしています。
追伸単純なajax POSTクエリを使用できません(質問しないでください...)
自分で解決しました!
問題は、正しい応答が送信されていても(Fiddlerで検証済み)、HTTP 200エラーコード(200ではなく)で送信されていたことでした。
応答がエラーコードで送信された場合、IEはiframe
の内容をディスクからロードされたエラーメッセージ(res://ieframe.dll/http_500.htm
)、それが原因でクロスドメインアクセス拒否エラーが発生します。
iFramesに関連するセキュリティ制限に注意してください。たとえば、Cross domain制限(別名CORS)。以下は、CORSに関連する3つの一般的なエラーです。
別のドメインでiFrameをロードします。 (例:「www.foo.com」を開き、トップフレームが「www.ooof.com ")
別のポートでiFrameをロードします。iFrameのURLportは、上のフレームのURLとは異なります。
異なるプロトコル:親フレームがHTTPを使用している間にHTTPS経由でiFrameリソースをロードします。
私の問題はX-Frame-Options
HTTPヘッダー。私のApache構成では次のように設定されています:
Header always append X-Frame-Options DENY
削除すると機能しました。特に私の場合、jQueryのiframeトランスポートを使用してjQueryファイルアップロードプラグインを使用して、IE 9およびIE 10。
私はこの質問が非常に古いことを知っていますが、上記の答えが私のために働いたことを言及したかったです:document.domainを各ページ(親ページとiframeページ)で同じに設定します。しかし、私の検索では、この興味深い記事を見つけました。
http://softwareas.com/cross-domain-communication-with-iframes
src='javascript:void(0)'
を含むiframeがある場合は、frame.document.location =...
はIEでアクセス拒否エラーで失敗します。ターゲットフレームと対話するjavascriptライブラリを使用していました。フレームを変更しようとしていた場所が親と同じドメイン上にあったにもかかわらず、iframeは最初にjavascript:voidに設定され、クロスドメインアクセス拒否エラーがトリガーされました。
これを解決するために、サイトにblank.htmlページを作成し、javascriptで変更されるまで最初は空白になるiframeを事前に宣言する必要がある場合は、src='/content/blank.html'
は同じドメインにあります。
あるいは、作成時にsrcを設定できるように、javascriptを使用してiframeを完全に作成することもできますが、私の場合は、iframeをページで宣言する必要があるライブラリを使用していました。