2009-11-03 15 views
5

He pasado probablemente un mes investigando en Internet sobre este tema y todavía no he encontrado la respuesta a esto. Mi código hace lo siguiente (todo Javascript).Document.Domain locura

Digamos que tengo un test.html en mydomain.com

  1. Muy a primera hora de la sección de cabeza me puse document.domain = 'mydomain.com';

  2. A continuación, crear dinámicamente iframe, establecer src para "subdomain.mydomain.com/test2.html"

  3. Anexar iframe para DOM

  4. subdomain.mydomain.com/test2.html: muy Lo primero en la sección principal: document.domain = 'midominio.com';

  5. Test2.html tiene caso on_dom_ready que trata de comunicarse con los padres a través de window.parent

Trabaja en todos los navegadores. incluso en IE6! El único problema es: cuando actualizo la página en IE, obtengo el error de acceso denegado.

La única manera en que puedo deshacerme de este error es esperar 12 segundos antes de llamar a window.parent. Ni siquiera 5 segundos de ayuda, literalmente tengo que esperar 12 segundos. No tiene sentido para mí.

¿Alguien tiene alguna experiencia con esto?

+0

¿Tiene este problema en IE7 e IE8, o simplemente en IE6? –

+0

IE 7 e IE6 ambos, no probaron en IE8 – Gotys

+0

Por actualización, ¿quiere decir presionar F5, o hacer clic en el área de la url y presionar enter? Estos desencadenan 2 "estilos" diferentes de recarga, uno que golpeará el caché al 100%, el otro que verificará el servidor en los últimos tiempos modificados. Si solo está viendo el error al actualizar con F5, intente actualizar colocando el cursor en la ventana de la url y presionando enter. – jvenema

Respuesta

2

Se debe a que el evento de carga en el fotograma principal aún no se ha activado y, por lo tanto, el DOM no está completamente creado. He aquí una chapuza que se analiza la existencia de un div en un intervalo hasta que está presente, sin volar: Respuesta

var minmax_SCANDELAY= 500; 
var minmax_scanner; 

function minmax_scan() { 
    if (!window.parent.document.getElementById('content')) return; 
    window.clearInterval(minmax_scanner); 

    //replace following function call with your own. 
    doYourMagicHere(); 
} 

minmax_scan(); 
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY); 
+0

¡Muchas gracias! Esto es una especie de información útil. El intervalo es una buena idea, en lugar de un tiempo de espera, tuve que ajustar la condición window.parent en la declaración try/catch, porque arrojaba un permiso que me denegaba los errores. Sin embargo, el mayor y más extraño problema es que tarda realmente 10 segundos para que window.parent esté disponible para el marco principal.Incluso cambié mis eventos on_dom_ready a on_loads solo para estar seguro, no ayudó. Me gustaría insistir una vez más: este no es un caso en la PRIMERA carga de la página ... solo después de una actualización. ¿Alguna idea? – Gotys

0

de furtivo me ha ayudado mucho! Estaba 100% correcto en el hecho de que el evento de carga es realmente el problema. He mirado más profundamente en mi código y me encontré, que antes de crear el marco flotante del niño, soy la carga diferida algunos scripts con la técnica de abajo:

lazy_load: function(url,on_finish_function) 
{ 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement("script"); 
    script.src = url; 
    var done = false; 

    var This = this; 
    // Attach handlers for all browsers 
    script.onload = script.onreadystatechange = function() 
    { 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) 
     { 
      done = true; 
      on_finish_function.call(This,null); 
      head.removeChild(script); 
     } 
    }; 
    head.appendChild(script); 
}, 

La función anterior modifica la sección HEAD del documento. El iframe hijo se genera en on_finish desde esta función lazy_load.

Supongo que los navegadores IE tienen mucho miedo de esto y tardan 12 segundos en recuperarse del impacto de tener el documento modificado así :) ¿Qué puedo hacer con este problema? ¿Por qué tarda tanto el IE en recuperarse de la manipulación dom lazy_load?

+0

head.removeChild (script); dentro de mi evento onload estaba causando el problema. ¡Problema resuelto! – Gotys

Cuestiones relacionadas