create - javascript iframe content
Error "Acceso denegado" al acceder al objeto del documento iframe (7)
Para publicar formularios AJAX en un formulario con muchos parámetros, estoy usando una solución para crear un iframe
, publicar el formulario en POST y luego acceder al contenido del iframe
. específicamente, estoy accediendo al contenido de esta manera:
$("some_iframe_id").get(0).contentWindow.document
Lo probé y funcionó.
En algunas páginas, comencé a recibir un error "Acceso denegado". Hasta donde yo sé, esto no debería suceder si el iframe se sirve desde el mismo dominio.
Estoy bastante seguro de que estaba funcionando antes. Alguien tiene una pista?
Si no estoy siendo lo suficientemente claro: estoy publicando en el mismo dominio . Entonces esta no es una solicitud entre dominios. Estoy probando solo en IE.
PD: No puedo usar consultas simples POST ajax (no preguntes ...)
¡Lo solucioné solo!
El problema era que, aunque se enviaba la respuesta correcta (verificada con Fiddler), se enviaba con un código de error HTTP 500 (en lugar de 200).
Entonces, resulta que si se envía una respuesta con un código de error, IE reemplaza el contenido del iframe
con un mensaje de error cargado desde el disco ( res://ieframe.dll/http_500.htm
), y eso causa la cruz -dominio de acceso denegado error.
Básicamente, este error ocurre cuando el documento en el marco y fuera de ii tiene dominios diferentes. Por lo tanto, para evitar navegadores de scripts cruzados, deshabilite dicha ejecución.
Mi problema era el encabezado HTTP X-Frame-Options
. Mi configuración de Apache lo tiene configurado para:
Header always append X-Frame-Options DENY
Quitarlo le permitió funcionar. Específicamente en mi caso estaba usando el transporte iframe para jQuery con el complemento de carga de archivos jQuery para cargar archivos en IE 9 e IE 10.
Sé que esta pregunta es muy antigua, pero quería mencionar que la respuesta anterior funcionó para mí: configurar el document.domain para que sea el mismo en cada una de las páginas: la página principal y la página iframe. Sin embargo, en mi búsqueda, encontré este interesante artículo:
http://softwareas.com/cross-domain-communication-with-iframes
Tenga cuidado con las limitaciones de seguridad asociadas a iFrames , como la restricción de dominio cruzado (también conocido como CORS). A continuación se muestran 3 errores comunes relacionados con CORS:
Cargue un iFrame con un dominio diferente. (Por ejemplo : abrir " www.foo.com " mientras que el marco superior es " www.ooof.com ")
Cargue un iFrame con un puerto diferente: el puerto de URL de iFrame difiere del del marco superior.
Diferentes protocolos: cargar recursos de iFrame a través de HTTPS mientras el marco principal usa HTTP.
Tenga en cuenta que si tiene un iframe con src=''javascript:void(0)''
, javascript como frame.document.location =...
fallará con el error de acceso denegado en IE. Estaba usando una biblioteca de JavaScript que interactúa con un marco de destino. Aunque la ubicación a la que intentaba cambiar el marco estaba en el mismo dominio que el elemento primario, el marco flotante se estableció inicialmente en javascript: void, que desencadenó el error de acceso de dominio cruzado denegado.
Para resolver esto, creé una página en blanco.html en mi sitio y si necesito declarar un iframe de antemano que inicialmente estará en blanco hasta que se cambie a través de javascript, lo señalo en la página en blanco para que src=''/content/blank.html''
está en el mismo dominio.
Alternativamente, puede crear el iframe completamente a través de javascript para que pueda configurar el src cuando se crea, pero en mi caso yo estaba usando una biblioteca que requería que un iframe ya se declarara en la página.
si se trata de un problema de dominio (o subdominio) como www.foo.com enviando una solicitud a www.api.foo.com
en cada página puedes configurar
document.domain = www.foo.com
para permitir permisos de "dominio cruzado"