Wir führen häufig Vorgänge auf übergeordneten Seiten und Iframe-Seiten durch, z. B.
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
Aber die
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.