& # 8220; Acceso denegado & # 8221; error al acceder al objeto de documento iframe

StackOverflow https://stackoverflow.com/questions/151362

  •  02-07-2019
  •  | 
  •  

Pregunta

Para publicar formularios AJAX en un formulario con muchos parámetros, estoy usando una solución de crear un iframe , publicar el formulario por POST y luego acceder al iframe contenido de específicamente, estoy accediendo al contenido de esta manera:

$("some_iframe_id").get(0).contentWindow.document

Lo probé y funcionó.

En algunas de las páginas, comencé a recibir un "Acceso denegado" error. 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 de dominio cruzado. Estoy probando solo en IE.

P.S. No puedo usar consultas simples de POST de ajax (no pregunte ...)

¿Fue útil?

Solución

¡Lo resolví 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 el error de acceso de dominio cruzado denegado.

Otros consejos

Tenga cuidado con las limitaciones de seguridad asociadas a iFrames , como la restricción Cross domain (también conocido como CORS). A continuación hay 3 errores comunes relacionados con CORS:

  1. Cargue un iFrame con un dominio diferente. (Ejemplo: abrir " www.foo.com " mientras que el marco superior es " www.ooof.com ")

  2. Cargue un iFrame con un puerto diferente: el puerto de URL del iFrame difiere del del marco superior.

  3. Diferentes protocolos: cargando el recurso iFrame a través de HTTPS mientras el Marco principal usa HTTP.

Mi problema era el encabezado HTTP X-Frame-Options . Mi configuración de Apache lo tiene configurado en:

Header always append X-Frame-Options DENY

Eliminarlo le permitió funcionar. Específicamente en mi caso, estaba usando el transporte de 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 de iframe. Sin embargo, en mi búsqueda, encontré este interesante artículo:

http://softwareas.com/cross-domain-communication-with-iframes

Tenga en cuenta que si tiene un iframe con src = 'javascript: void (0)' , entonces javascript como frame.document.location = ... fallará con Access Error denegado en IE. Estaba usando una biblioteca de JavaScript que interactúa con un marco de destino. A pesar de que la ubicación a la que intentaba cambiar el marco estaba en el mismo dominio que el padre, el iframe se configuró inicialmente en javascript: void, lo que provocó el error de acceso de dominio cruzado denegado.

Para resolver esto, creé una página blank.html en mi sitio y si necesito declarar un iframe por adelantado que inicialmente estará en blanco hasta que se cambie a través de javascript, lo apunto a la página en blanco para que src = '/ content / blank.html' está en el mismo dominio.

Alternativamente, podría crear el iframe completamente a través de javascript para que pueda configurar el src cuando se crea, pero en mi caso estaba usando una biblioteca que requería que un iframe ya se declarara en la página.

Básicamente, este error ocurre cuando el documento en marco y fuera de ii tiene dominios diferentes. Entonces, para evitar que los navegadores de secuencias de comandos cruzados deshabiliten dicha ejecución.

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 puede configurar el

document.domain = www.foo.com

para permitir "dominio cruzado" permisos

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