Pregunta

La escena:Estoy escribiendo un widget integrable.Toma la forma de un <script> etiqueta, que construye un iframe que contiene todo lo que necesita para mostrar.El iframe no tiene src, y el guión se escribe en él con theIframe.contentWindow.document.write().Esto mantiene el widget de contenidos, y mantiene identificadores de elemento de secuencia de comandos y de conflicto con la página en la que el widget está incrustado.

El truco:El widget tiene que ser capaz de cambiar su tamaño.Para ello, se establece que la contienen iframe del style.height.Esto requiere el acceso a la zona exterior de la página del DOM.En Firefox y Es decir, esto está permitido, porque el iframe del documento y el exterior documento se consideran para compartir un origen.

El giro:En Safari, sin embargo , los dos documentos son considerados no para compartir un origen.El interior de documento es considerado en about:blank, mientras que el exterior de documento es claramente el uso de un protocolo diferente y "dominio" (si blank puede ser considerado como el dominio).

La pregunta:¿Cómo puedo crear un iframe mediante programación cuyo documento Safari/WebKit se considere la posibilidad de tener el mismo origen que el documento de la ventana de la creación?


Editar:Después de más de experimentación, no puedo encontrar una manera para crear mediante programación un iframe cuya ubicación no es about:blank independientemente de si puedo cambiar su contenido.

Si puedo crear el marco con document.createElement(), darle un src lo que apunta a un HTML real de los recursos en el mismo origen llamado "foo.html" y document.body.appendChild() es, Safari de la consola muestra el elemento como se esperaba en el DOM, pero el contenido de la página no aparecen, y el documento que aparece en la barra lateral como "about:blank".

Si tengo que incluir el código HTML del iframe directamente en la página, el contenido de foo.html aparecen, y "foo.html" aparece en la barra lateral.

Si puedo insertar el HTML utilizando document.write(), Puedo obtener el mismo resultado que con document.body.appendChild().

Tanto programáticos versiones funciona en Firefox.

¿Fue útil?

Solución 2

La Aha.Esto parece ser un error en WebKit.Cuando un iframe es creado mediante programación, su src atributo es ignorado.En su lugar, el marco de valores predeterminados para about:blank y debe ser dirigida a una dirección URL para que apunte a otra parte.Por ejemplo:

theIframe.contentWindow.location = theIframe.src

Otros consejos

La mejor sugerencia que podría dar es que el conjunto de marco flotante a una página en blanco en el mismo servidor (es decir blank.html) y luego editar el contenido. Un dolor en la parte trasera, lo sé, pero es una solución temporal.

También puede probar

iframe.contentDocument.open("replace");
iframe.contentDocument.write("<b>This is some content</b>");
iframe.contentDocument.close();

Sin embargo, no estoy seguro de si eso sólo funciona en IE. Lo siento, no podía ser más útil que eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top