Frage

Für AJAX Formen in einer Form mit vielen Parametern Posting, ich bin mit einer Lösung eines iframe erstellen, veröffentlichen das Formular per Post, und dann die iframe den Inhalt zugreifen. Insbesondere bin ich den Inhalt wie folgt erreichbar:

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

Ich habe es getestet und es funktioniert.

Auf einigen der Seiten, begann ich immer eine „Zugriff verweigert“ -Fehler. Soweit ich weiß, soll dies nicht passieren, wenn der iframe aus der gleichen Domäne serviert wird.

Ich bin mir ziemlich sicher, dass es vor funktioniert. Jedes hat eine Ahnung?

Wenn ich nicht klar genug zu sein: Ich bin Entsendung in die gleichen Domäne . Das ist also nicht eine Cross-Domain-Anfrage. Ich teste auf nur IE.

P. S. Ich kann nicht einfach Ajax POST-Abfragen verwendet (nicht fragen ...)

War es hilfreich?

Lösung

Gelöst es selbst!

Das Problem war, dass, obwohl die richtige Antwort (überprüft mit Fiddler) gesendet wurde, ist es mit einem HTTP 500-Fehlercode gesendet wurde (statt 200).

So stellt sich heraus, dass, wenn eine Antwort mit einem Fehlercode gesendet wird, IE ersetzt den Inhalt des iframe mit einer Fehlermeldung von der Platte (res://ieframe.dll/http_500.htm) geladen, und das bewirkt, dass die domänenübergreifende Zugriff verweigern Fehler.

Andere Tipps

Vorsicht vor Sicherheitseinschränkungen verbunden zu iFrames , wie Cross-Domain Einschränkung (aka CORS). Im Folgenden sind drei häufige Fehler CORS bezogen werden:

  1. Laden Sie ein iFrame mit einer anderen Domäne. (Ex: Öffnung " www.foo.com ", während oberer Rahmen ist " www.ooof.com ")

  2. Laden Sie ein iFrame mit einem anderen Port. IFrame URL port unterscheidet sich von der des oberen Rahmens

  3. Verschiedene Protokolle:. Laden iFrame Ressource über HTTPS, während übergeordneten Rahmen verwendet HTTP

Mein Problem war die X-Frame-Options HTTP-Header. Meine Apache-Konfiguration hat es auf:

Header always append X-Frame-Options DENY

Entfernen es erlaubt, es zu arbeiten. Insbesondere in meinem Fall war ich mit iframe Transport für jQuery mit der jQuery-Datei-Upload-Plugin 10 Dateien in IE 9 und IE laden.

Ich weiß, diese Frage ist super-alt, aber ich wollte erwähnen, dass die oben genannte Antwort für mich gearbeitet: die document.domain Einstellung das gleiches auf jedem des pages-- der übergeordnete Seite und die iframe-Seite zu sein. Doch in meiner Suche, ich habe diesen interessanten Artikel finden:

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

Beachten Sie, wenn Sie einen Iframe mit src='javascript:void(0)' haben dann Javascript wie frame.document.location =... mit Zugriff verweigert Fehler in IE fehlschlagen. War eine Javascript-Bibliothek, die mit einem Zielrahmen in Wechselwirkung tritt. Auch wenn die Lage es wurde versucht, den Rahmen zu ändern, um auf der gleichen Domäne wie Eltern war, wurde die iframe zunächst auf Javascript gesetzt. Leere, die die Cross-Domain-Zugriff verweigert Fehler ausgelöst

Um dies zu lösen, habe ich eine blank.html Seite in meiner Seite, und wenn ich brauche einen Iframe im Voraus zu erklären, die zunächst leer, bis über Javascript geändert werden, dann verweise ich es auf die leere Seite, so dass src='/content/blank.html' in der ist gleiche Domäne.

Alternativ können Sie den iframe vollständig durch Javascript erstellen, so dass Sie die src einstellen, wenn es erstellt wird, aber in meinem Fall habe ich eine Bibliothek wurde unter Verwendung der reqired ein iframe bereits auf der Seite deklariert werden.

Grundsätzlich tritt dieser Fehler auf, wenn das Dokument in Rahmen und außerhalb ii verschiedene Domänen aufweist. So verhindern Cross-Side-Scripting-Browser wie Ausführung deaktivieren.

, wenn es sich um eine Domain-Ausgabe (oder Sub-Domain), wie www.foo.com Senden einer Anfrage an www.api.foo.com

auf jeder Seite können Sie einstellen, die

document.domain = www.foo.com

für "Cross-Domain" Berechtigungen ermöglichen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top