2011-12-09 12 views
6

Tengo una biblioteca de terceros (mootools) creando pestañas y tengo google doble clic para editores (dfp) crear anuncios. dfp crea los anuncios en un iframe, luego el script de pestañas captura un anquestor del iframe y 'messes' con él para crear las pestañas. El contenido del iframe se pierde en el proceso.iframe contenido desaparece cuando es manipulado por mootools

Estoy buscando una forma de hacer frente a esto (intenté disparar las cosas dfp después de que las pestañas se habían cargado pero luego se bloquearon las secuencias de comandos de google).

El iframe pertenece a un dominio diferente al de la ventana padre, por lo que todo lo que intente hacer cosas con los elementos dentro del iframe va a fallar.

addTab: function(text, title, content) { 
    var grab = $(content); 
    var container = (grab || new Element('div')) 
     .setStyle('display', 'none') 
     .addClass(this.options.classContainer); 
    this.wrapper.adopt(container); 
    var pos = this.tabs.length; 
    var evt = (this.options.hover) ? 'mouseenter' : 'click'; 
    var tab = { 
     container: container, 
     toggle: new Element('li').grab(new Element('a', { 
      href: '#', 
      title: title 
     }).grab(
      new Element('span', {html: text}) 
     )).addEvent(evt, this.onClick.bindWithEvent(this, [pos])).inject(this.menu) 
    }; 
    if (!grab && $type(content) == 'string') tab.url = content; 
    this.tabs.push(tab); 
    return this.fireEvent('onAdded', [tab.toggle, tab.container, pos]); 
}, 
+0

Asumo 'var = $ agarre (contenido);' es su contenido iFrame, ¿verdad? ¿Qué sucede cuando trazas a través de tu código? ¿"Grab" realmente contiene el contenido de iFrame como se esperaba? Si es así, a medida que avanzas en tu función, ¿dónde se pierde? –

Respuesta

1

Siempre que un iframe o un antepasado de que están desconectados de la DOM, el contenido del iframe se borrará y el iframe que se recargue cuando ella o su antecesor se reinserta espalda. Este comportamiento molesto ocurre en Firefox y Webkit, pero creo que los iframes no se volverán a cargar en IE.

Como solución alternativa, deberá encontrar una forma de reordenar el código para que el iframe solo se agregue después de, la secuencia de comandos de tabulación se hace en el contenedor.

Chrome aparentemente también tiene una opción que hace que el iframe no se vuelva a cargar si lo mueve con adoptNode en lugar de apendChild, pero no creo que sea un navegador cruzado.

para más información, consulte esta pregunta similar: How to move an iFrame in the DOM without losing its state?

Cuestiones relacionadas