2012-04-28 12 views
6

En mi localhost, estoy usando el siguiente JavaScript para crear un iframe con src, y añadirlo al documento:contenido del iframe creado de forma dinámica está vacía

$('#preview').html('<iframe src="http://google.com/"></iframe>'); 

Los espectáculos iframe pero no el contenido. En Firebug, es simplemente:

<iframe src="http://google.com/"> 
    <html> 
     <head></head> 
     <body></body> 
    </html> 
</iframe> 

Cuando ejecuto $('iframe').attr('src','http://google.com/'); en la consola, las cargas del navegador (dice "Esperando a google.com ..."), entonces parece que actualizar el contenido del iframe. Pero, de nuevo, está vacío.

Si lo configuro en una página local, sin embargo, se carga el contenido.

¿Esto se debe a la misma política de origen? No estoy tan informado sobre eso. Hice algunos google y estoy confundido porque algunos sitios dicen que está bien incluir un iframe con src que no pertenece a su propio dominio, y algunos dicen que no es posible.

Por cierto, dado que todavía estoy probando en localhost, ¿funcionaría esto si lo subiera a un servidor en alguna parte? (pero src of iframe seguirá estando en un dominio diferente)

¿Ayuda?

Respuesta

12

Si hiciéramos el registro de consola de errores del navegador, que te han visto este mensaje:

se negó a mostrar documento porque prohibido por la pantalla X-Frame-Options.

Por lo tanto, esto no es un error de su parte, sino una acción deliberada por parte de Google.

Las dos opciones para el X-Frame-Options son:

  • deny - ninguna prestación dentro de un marco, y
  • sameorigin - ninguna prestación si el origen de desadaptación

Referencias:

+0

Muchas gracias.El tercer enlace (SO) fue útil ya que estoy tratando de cargar un mapa de google en el iframe. – Obay

+0

De nada, me alegro de haber sido de ayuda =) –

4

Sí, el código está prohibido debido a la misma política de origen. Leer here

Supongamos que es el propietario del dominio http://www.example.com entonces es probable que puede tener resultados siguientes, cuando se llama a través de las páginas de marcos flotantes:

Compared URL        Outcome Reason 
--------------------------------------------------------------------------------------------- 
http://www.example.com/dir/page.html  Success Same protocol and host 
http://www.example.com/dir2/other.html  Success Same protocol and host 
http://www.example.com:81/dir2/other.html Failure Same protocol and host but different port 
https://www.example.com/dir2/other.html Failure Different protocol 
http://en.example.com/dir2/other.html  Failure Different host 
http://example.com/dir2/other.html   Failure Different host (exact match required) 
http://v2.www.example.com/dir2/other.html Failure Different host (exact match required) 

Ahora, que está llamando google.com, que es una cuestión de dominio cruz sobre tú. Para evitar este problema, JSONP puede ayudarlo. Utiliza la política de script abierto para <script>, para recuperar JSON de dominios cruzados.

Cuestiones relacionadas