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.


Cross-Posting de www.lonetcamp.com


 

4 comentarios en “Iframe Access Denied Cross Domain”

  1. Hola,
    estoy intentando acceder a un archivo txt que se encuentra en otro dominio:

    ajax.open(“GET”, “http://ww.otrositio.com/AjaxWeb/texto/contenido/carga.txt?noCache=” + aleatorio, true);
    ajax.onreadystatechange = cargarContenidoZonaUno;
    ajax.send(null);

    ajax es una variable que instancia el objeto XmlHttpRequest y cuando hago referencia al archivo txt
    que esta alojado en otro sitio web, me arroja el dichoso error de permiso denegado.
    aleatorio es una variable que contiene un número cargado aleatoriamente para evitar cache.

    ha igual me pasa cuando consulto un webservice con jquery:

    $.ajax({
    type: “POST”,
    contentType: “application/json; charset=utf-8”,
    url: “http://www.otrositio.com/AjaxWeb/WebService.asmx/WebMethodName”,
    data: “{‘obj’:’1′}”,
    dataType: “json”
    });

    como podria evitar este error, funciona igual que el Iframe?
    de antemano gracias por tu ayuda.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *