Iframe Access Denied Cross Domain

Iframe + AjaxControlToolkit v1 + IE = Access Denied Cross Domain

Siempre oí hablar del infierno de las DLL pero cuando hablamos de desarrollos web no nos podemos olvidar del infierno de los iFrames. Cabe decir que este problema lo han solucionado en la nueva versión de AjaxControlToolkit v3 pero para los que tenemos algún proyecto con la versión  anterior tenemos una solución para este problema de permisos.

Primero mostraremos gráficamente cual es el problema.

Hemos creado un simple TexBox con un CalendarExtender para seleccionar una fecha del calendario y esta página de ejemplo la llamamos desde un Iframe que se encuentra en otro dominio, como si la llamada fuera desde un cliente ;-).

Un claro ejemplo de un error de acceso de Cross-Domain.

En el Blog de Bertrand Le Roy’s nos da una solución para poder solucionar este problema que lo provoca Sys.UI.getLocation al intentar acceder a una  propiedad de la página.

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
<script type= "text/javascript">
   if (Sys.Browser.agent == Sys.Browser.InternetExplorer){
      Sys.UI.DomElement.getLocation=function(a){
      if(a.self||a.nodeType===9)
         return new Sys.UI.Point(0,0);

      var b=a.getBoundingClientRect();
      if(!b)
         return new Sys.UI.Point(0,0);

      var c=a.document.documentElement,d=b.left-2
           +c.scrollLeft,e=b.top-2+c.scrollTop;

      try{
        var g=a.ownerDocument.parentWindow.frameElement||null;
        if(g){
           var f=2-(g.frameBorder||1)*2;
           d+=f;e+=f
        }
      }catch(h){}
         return new Sys.UI.Point(d,e)};

      }

Lo único que tenemos que hacer es sobreescribir Sys.UI.DomElement.getLocation cuando el exploración sea InternetExplorer y evitaremos el tan temido error.

Con esta pequeña modificación ya podemos utilizar nuestro ejemplo dentro de un Iframe desde otro dominio.

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s