Ajax y el "Access Denied" cross-domain con un IFrame
Uno de los grandes problemas que tenemos en lo referente a seguridad web, son los temido ataques “cross-site scripting”. Algo que navegadores como IE (Internet Explorer) solventa con la negacion por defecto de acceso a scripts que estan hospedados en dominios distintos a los de nuestras aplicacion. Algo que otros navegadores no han optado por llevarlo desde un inicio.
Esto nos lleva a que si tenemos que empotrar nuestro desarrollo dentro de un iframe de terceros, hospedados ambos en servidores distintos nuestra aplicacion funcionara perfectamete en Firefox, Safari, ….. pero no en IE, dandonos el error de “Access is denied” a ese script.
La solucion es bastante mas sencilla de lo que hayamos podidos leer en otros sitios (1 y 2), simplemente tendremos que agregar a nuestra pagina o master page (dependiendo de donde nos convenga) el siguiente script:
<scripttype= “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)}};
</script>
Espero que os sea util, y no os saque de vuestras casillas las distintas politicas e interpretaciones de cada navegador.