Red de Respuestas Legales - Derecho empresarial - ¿Cómo obtiene JavaScript el contenido de un iframe entre dominios?

¿Cómo obtiene JavaScript el contenido de un iframe entre dominios?

Para explicar este problema, primero debemos explicar dos puntos técnicos.

Cada "ventana" es un tiempo de ejecución de JS, que es el tiempo de ejecución de JS. Si solo hay una ventana, solo hay un tiempo de ejecución; si hay un iframe debajo de una ventana, hay dos tiempos de ejecución, y así sucesivamente;

La interoperabilidad (o comunicación) entre tiempos de ejecución entre dominios es limitada. En otras palabras, si la ventana en sí es una página con el nombre de dominio a.baidu.com, entonces si hay un iframe debajo de esta página, entonces la página cargada en este iframe será una página con el nombre de dominio b.baidu. com. Entonces fuera de JS. No puede interoperar (o comunicarse) con el contenido dentro de este iframe.

Por lo tanto, si JS en el tiempo de ejecución externo quiere operar el contenido en el iframe interno, debe evitar restricciones entre dominios. O el nombre de dominio de la página de carga del iframe interno es el mismo que el externo. O necesita ejecutar document. domain = 'Baidu com' en la página cargada por el iframe interno para que la configuración sea la misma que la del dominio principal de la capa externa.

Por ejemplo, la página actual es a.baidu.com/test.html.

& lthtml & gt

& lthead & gt

& lt/head & gt;

& ltbody & gt

& ltiframe id = " ifrm 1 " src = " 0 c 893329 b 8 c 9 af 6 ff 578 db 9 b 1a 128d 13 " margen: 0px; relleno: 0px color: rgb (69, 69, 69); familia de fuentes: arial, arial, sans-serif, Tahoma, 'Microsoft Yahei'; tamaño de fuente: 14px; estilo de fuente: Normal; Variante de fuente: Normal; Peso de fuente: Normal; Espacio entre letras: Normal; Automático; Espaciado de palabras: 0px - WebKit-tap-highlight-color: rgba (26, 26, 26, 0.301961); - WebKit-text-size-adjust: auto - WebKit-text-stroke-width: 0px; gt

El contenido de la página cargada en el iframe es el siguiente:

& lthtml & gt

& lthead & gt

& lt/head & gt;

& ltbody & gt

& ltdiv id = "nnerDiv" & gt¡Felicitaciones por manipular los elementos en el iframe interno! p>& ltscript>

dominio = 'Baidu com';

& lt/script & gt; /p>

& lt/html & gt;

La API postMessage se agrega en HTML5 para facilitar la comunicación entre la ventana y el iframe interno, y puede lograr la comunicación entre dominios. Existen algunas restricciones. , que generalmente no son compatibles con los navegadores más antiguos 2. La ventana principal solo puede enviar información al iframe, y el iframe solo puede recibir mensajes. La ventana principal no puede operar directamente el contenido del iframe. La ventana principal también es limitada. Solo se pueden enviar tipos de datos básicos u objetos ordinarios.