Heim > Web-Frontend > js-Tutorial > Lösen Sie das Problem der Kommunikation zwischen der übergeordneten Seite und der Iframe-Seite durch Pseudoprotokoll_Javascript-Kenntnisse

Lösen Sie das Problem der Kommunikation zwischen der übergeordneten Seite und der Iframe-Seite durch Pseudoprotokoll_Javascript-Kenntnisse

WBOY
Freigeben: 2016-05-16 16:05:46
Original
1263 Leute haben es durchsucht

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();
Nach dem Login kopieren

Der obige Code ist in den meisten Fällen korrekt. Es gibt jedoch eine Situation, in der die übergeordnete Seite explizit document.domain = "xxx";

schreibt

In 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.

Code kopieren Der Code lautet wie folgt:

iframe.src="javascript:void((function(){var d=document;d.open();d.domain='xxx;d.write('---something');d.close()} )())";

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 und der über das Pseudoprotokoll des Iframes geschriebene Inhalt wird neu angezeigt Seite wie window.open,
Aber die 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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage