¿Cómo puedo crear un iframe con el mismo dominio que la página en Safari/WebKit
-
21-08-2019 - |
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.
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.