2008-09-30 24 views
23

Para publicar formularios AJAX en un formulario con muchos parámetros, estoy usando una solución para crear un iframe, enviando el formulario por POST y luego accediendo al iframe contenido. específicamente, yo soy el acceso a los contenidos de esta manera:Error de "Acceso denegado" al acceder al objeto de documento de iframe

$("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.

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

Respuesta

48

¡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).

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 causa el error de acceso de dominio cruzado.

+0

Estoy cargando archivos usando fileupload.js (usa iframe). Parece que tengo el mismo problema, pero no estoy seguro de qué puede causar esto. Parece solo un problema de tiempo de espera. ¿Cómo lo evitaste? –

+0

No estoy seguro de entender la pregunta. En cualquier caso, si crees que está relacionado con mi solución, deberías echar un vistazo al código HTTP que se devuelve con la respuesta a la carga. – Ovesh

+3

Gracias. En mi caso, estoy devolviendo '400 Bad Request' si los archivos cargados contienen errores (alguna validación). Causa el error "Acceso denegado". – manikanta

-1

Básicamente, este error se produce cuando el documento en el marco y fuera de ii tienen dominios diferentes. Por lo tanto, para evitar navegadores de scripts cruzados, deshabilite dicha ejecución.

+2

Estoy publicando en el mismo dominio. – Ovesh

-1

si se trata de una cuestión de dominio (o subdominio) como www.foo.com enviando una solicitud a www.api.foo.com

en cada página se puede establecer el

document.domain = www.foo.com 

para permitir permisos de "dominio cruzado"

1

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, he encontrado este interesante artículo:

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

5

errores de dominio cruzadas causedby 3 cosas cuando se trata de iFrames:

  1. iFrame abierto con los diferentes URL (por ejemplo, la apertura www.foo.com) desde la página principal (www.ooof.com)

  2. puertos diferentes (apertura iframe con url:) diferente del puerto original

  3. protocolos diferentes: la apertura iFrame con HTTPS URL de una página principal que es un HTTP

cheque aquellos si te encuentras con este problema.

2

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

Header always append X-Frame-Options DENY 

Quitarlo le permitió funcionar. En concreto, en mi caso yo estaba usando el transporte iframe para jQuery con el plugin jQuery carga de archivos para subir archivos en Internet Explorer 9 y 10. IE

+0

Me enfrenté al mismo problema en mi entorno. Establecer X-Frame-Options en SAMEORIGIN me solucionó el problema – IsAs

1

Nota si tiene un iframe con src='javascript:void(0)' continuación javascript como frame.document.location =... fallará con el error de acceso denegado en ES DECIR. 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 cambie a través de javascript, lo señalo en la página en blanco para que src='/content/blank.html' el mismo dominio

Como alternativa, 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 un iframe que ya se declarara en la página.

Cuestiones relacionadas