tracker seguimiento problem multidominio google allowlinker javascript html security iframe cross-domain

javascript - seguimiento - iframe cors problem



Manera infalible de detectar si iframe es de dominio cruzado (1)

Debe hacer un poco más de lo que está en su try / catch para manejar diferentes navegadores y para manejar las diferentes maneras en que los navegadores manejan el acceso a varios dominios:

function canAccessIFrame(iframe) { var html = null; try { // deal with older browsers var doc = iframe.contentDocument || iframe.contentWindow.document; html = doc.body.innerHTML; } catch(err){ // do nothing } return(html !== null); }

En tu ejemplo, esto sería:

var accessAllowed = canAccessIFrame(document.getElementsByTagName(''iframe'')[0]);

Demostración de trabajo: http://jsfiddle.net/jfriend00/XsPL6/

Probado en Chrome 21, Safari 5.1, Firefox 14, IE7, IE8, IE9.

Estoy tratando de determinar si algún iframe es de dominio cruzado o no. De acuerdo con la respuesta aceptada en esta pregunta: Detectar cuándo el iframe es de dominio cruzado, luego salir de él dice que se debe poner el código que accede al contentDocument del iframe en un bloque try / catch . Intenté esto para un iframe de dominios cruzados en Chrome:

try { document.getElementsByTagName(''iframe'')[0].contentDocument; } catch(err){ console.log("called"); }

y todavía arroja el error de dominio cruzado y no captura el error.

También intenté verificar si el protocolo + host + puerto de la url de la página principal está en el src del iframe:

function thirdPartyIframe(iframe){ var url = document.location.protocol + "//" + document.location.hostname + (document.location.port === "" ? "" : ":" + document.location.port); var regexp = new RegExp(url.replace(////g, "///").replace(//./g, "//.")); if (iframe.src === '''' || regexp.test(iframe.src)){ return false; } else { return true; } }

pero esto no parece funcionar para el primer iframe en la página de inicio de Facebook con src igual a (es largo):

"http://www.facebook.com/ai.php?aed=AQLlH2cfdnsnLrDUVyqrQPlWpayw9N09Z_iNuhulevbeEfVa4mcVRcT8cjAZOjQb8y1QXab5Ae3aSEJx49U_Qv35rtSp1VC9cY0_CrpOjMDk40hS_Xm57A996YtRVCcWSuRZ_jZERQ_iA_E4621NAbKHT9dsB7uElkRtTvl5K-zPI0jeH-BEnlZIOXbeEdbRC6qCwoToaltolpe-Ot2KWgkfb_vBZYpzUc3jQoEHzLG6tauO9l_hkXpYpHxnt-KYFKIFZ1PgmrHgb0UcGjeKHl7yBR1AbW2n5XgdgaAhFvBjs5GZlKy566nvl8eLRA60orwkwtWYeN8-gKoAmOLm7-6minsWn8lk1h2Qn3p07HCTSnYHfv1aJ6mF5jmuzP0YYe7Ym9ZbmK-tvax4uPAQJ2OdULilKbEh8M-2V9pVY3AC228OPlrRullZuuOg8DI2A8WeMF-fbbOdOFFVCe5Gj1CaZu3LYXiqdG7mUgY6AEpk9ZzGT4fC2K8DInQo1AypCvzG64C_bEWfODeXe0aGbkWwsUUmO7E5HFg0tvZkK5IAR_xxxQ2rlf5jbcEDo_2gdIDdHe1HT75-SJLUsSA0M8EU01oNNPuWwEC2BW6inepc9QPuqeg42tcEbKLU-rIUnXDBLvgutft8azWPPQ6_LafGjCAmC9uTalagoWLLDMpQOThvPg7YeVd7qg_c9Mzn2GAfuswcxDSxyRIZo9MaOhA6mhfXeE1tmjyBBsMxnx08tO21Jsfgch59fmMxpeJzdsNMPK3FAojfglvCQ2Zrt_6ataexUB4xlM7_PhKrfBPtxb5fe2TE9-nlWruNEpoCrzI05yv4Go3CYEWHob06K_9iICfNVTFkSYGTiJnMXCy_fdgfyzUIn5QJIPRo4-Wnyg444zKAO_nyFW59LqbIanHVfFY6ybiA6KeC3meREWzTPSsrU5d_NbYHlJWb8uPNDR04jaH5e2qiYj3Y8qgLQA5m"

Mi función lo clasifica como no un iframe de un tercero, pero Chrome aún arroja el error de dominio cruzado cuando contentDocument su contentDocument .

Estoy buscando una manera infalible, de navegador cruzado para hacer esto.