2010-04-22 8 views
5

¿Es posible leer/editar contenidos de marcos (no solo propiedades como src) con scripts que están en la página pero fuera de este marco? Sé que es imposible si la fuente es de otro sitio, ya que sería un gran agujero de seguridad, pero solo pregunto si funciona para otro contenido del mismo origen.Javascript e mismo origen iframes

+0

Creo que este enlace dice todo [Scripting Iframes - Tutorial y ejemplos] (http://www.dyn-web.com/tutorials/iframes/) – mplungjan

Respuesta

0

si el iframe-contenido es del mismo dominio puede acceder a él mediante el uso de frames.myiframe.getElement...

0

El navegador sólo restringe el acceso a los contenidos/matrices de marco flotante en el contenido que no es del mismo dominio. Para solicitudes desde el mismo dominio, puede acceder al contenido a través del window.parent o por myiframe.document.getElementById

3

Sí, puede hacerlo si la ubicación del iframe y la página principal son del mismo host (misma política de origen).

Para asegurar el navegador va a dejar de hacer esto, puede utilizar

document.domain = "example.com" 

en la página principal y en el marco flotante. (Nótese que subdomain.example.com y example.com son diferentes)

método para hacer esto Dom (página padre a iframe):

document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside."; 

document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();

contentWindow es la respuesta y funciona en la mayoría si no en todos los navegadores modernos, sin duda Chrome, ie7 + etc.

Para ir por el otro camino (iframe a la página principal):

top.document.getElementById("DivInTopParent") 
4

Para añadir a lo que ya se ha dicho acerca de la interacción con los marcos flotantes cargados desde el mismo dominio:

El navegador le permitirá interactuar con los marcos flotantes (o marcos), siempre y cuando la página que se está tratando para hacer la interacción y la página que ha cargado tiene el mismo document.domain.

Puede establecer el document.domain con un sufijo del host desde el que se cargó. p.ej. si usted tiene una página cargada desde blog.fred.com y quiere interactuar con algún servicio llamado jsonservice.fred.com, ambas páginas tendrán que hacer

document.domain = 'fred.com'; 

antes de Javascript de uno será capaz de interactuar con el otro.

Los navegadores son lo suficientemente inteligentes como para no permitir al usuario configurar la document.domain a '.com', en caso de que se preguntan ...

0

Esto no es exactamente un/javascript solución del lado del cliente, pero me ayudó a resolver el problema

Es necesario eliminar la cabecera X-Frame-Options, si está presente, y en lugar de enviar la siguiente una para la página iframe:

Content-Security-Policy: frame-ancestors 'self' example.com *.example.com 

y adicional una para IE:

X-Content-Security-Policy: frame-ancestors 'self' example.com *.example.com 
Cuestiones relacionadas