Heim >Web-Frontend >js-Tutorial >Lösen Sie das Problem der Kommunikation zwischen der übergeordneten Seite und der Iframe-Seite durch Pseudoprotokoll_Javascript-Kenntnisse
Wir führen häufig Vorgänge auf übergeordneten Seiten und Iframe-Seiten durch, z. B.
939370b3c8787d52ac84eef51d6f9a93065276f04003e4622c4fe6b64f465b88
Der Inhalt in diesem Iframe ist in js geschrieben. Wie zum Beispiel der folgende Code
var iframe = document.getElementById("iframe"), doc = iframe.contentWindow.document; doc.open(); doc.write("---------something------"); doc.close();
Der obige Code ist in den meisten Fällen korrekt. Es gibt jedoch eine Situation, in der die übergeordnete Seite explizit document.domain = "xxx";
schreibtIn der IE-Serie (ich habe es nicht unter IE10 ausprobiert) wird der Fehler auftreten, dass keine Berechtigung vorhanden ist. In Firefox und Chrome gibt es kein Problem.
Warum ist das so? Das ist ein Fehler im IE, das heißt, wenn die übergeordnete Seite document.domain nicht explizit festlegt, verwendet der Iframe standardmäßig die gleiche document.domain wie die übergeordnete Seite, also beide sind
location.host, übergeordnete und untergeordnete Seiten können kommunizieren, das heißt, das Beispiel des Artikelheaders, aber wenn die übergeordnete Seite explizit document.domain=" festlegt, müssen die Seiten im Iframe auch explizit document.domain festlegen = „xxx“, sonst
Wenn Sie keine Berechtigung zum Abrufen von iframe.contentWindow.document haben, können Sie den Inhalt nicht dynamisch schreiben. Sie können den Iframe auch explizit auf eine bestimmte Seite verweisen lassen. xxx“ und dann durch den Artikel Das Startquadrat
, aber das Problem ist, dass meine übergeordnete Seite viele solcher Iframes hat und die Anzahl unbekannt ist (alles sind Werbeflächen), sodass sie keine bestimmte Seite passieren kann.
Das Problem tritt auf. In diesem Fall scheinen wir keine Lösung zu haben
1. Die übergeordnete Seite ist festgelegt und muss document.domain explizit festlegen
2. Der Inhalt der Iframe-Seite muss dynamisch von js generiert werden.
3. Keine Möglichkeit, src für iframe festzulegen.
Aber wenn die oben genannten drei Bedingungen erfüllt sind, können wir diese Art von Problem durch Pseudoprotokoll lösen.
Auf diese Weise kann die document.domain des Iframes explizit so eingestellt werden, dass sie mit der übergeordneten Seite übereinstimmt.
Nachdem ich dies geschrieben habe, wird die Notwendigkeit, Iframe-Inhalte dynamisch zu schreiben, tatsächlich erkannt, aber diese Seite wird separat angezeigt, wie window.open();
Warum ist das so? Dies ist auch ein Fehler in der IE-Reihe, das heißt, die übergeordnete Seite hat 5d43740c2c81c12a30358e8bd80a5b616f6cb83b34cb7f2d6a4aed109317b73a und der über das Pseudoprotokoll des Iframes geschriebene Inhalt wird neu angezeigt Seite wie window.open,
Aber die dde6fb694e6711ae5e6f381704c04ae4 der übergeordneten Seite muss _self sein, daher können Sie das Ziel von base nur auf _self setzen, bevor Sie iframe.src aufrufen. Nachdem der Inhalt geschrieben wurde, setzen Sie das Ziel von base auf _blank
Dies löst das Problem.
Obwohl Pseudoprotokolle dieses Problem lösen können, gibt es einige Risiken. Verwenden Sie diese Methode nicht beiläufig, es sei denn, es ist absolut notwendig.