2011-12-09 8 views
6

Ho una libreria di terze parti (mootools) che crea schede e ho google double click for publishers (dfp) che crea annunci. dfp crea gli annunci in un iframe, quindi lo script di tablature acquisisce un'ancora dell'iframe e "crea problemi" con esso per creare le schede. Il contenuto dell'iframe si perde nel processo.I contenuti di iframe scompaiono quando manipolati da mootools

Sto cercando un modo per far fronte a questo (ho provato a sparare alla roba di dfp dopo che le schede erano state caricate ma poi gli script di google si sono bloccati).

L'iframe proviene da un dominio diverso rispetto alla finestra padre, quindi tutto ciò che tenta di eseguire operazioni sugli elementi all'interno dell'iframe fallirà.

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

che sto assumendo 'var afferrare = $ (contenuto);' è il tuo contenuti iFrame, giusto? Cosa succede quando si traccia il codice? "Grab" contiene effettivamente il contenuto iFrame come previsto? In tal caso, mentre passi attraverso la tua funzione, dove si perde? –

risposta

1

Ogni volta che un iframe o un antenato di esso sono scollegati dal DOM, il contenuto del iframe verrà cancellata e l'iframe verrà ricaricato quando o il suo antenato viene reinserito indietro. Questo comportamento anomalo si verifica in Firefox e Webkit, ma penso che gli iframe non si ricaricheranno su IE.

Per ovviare al problema, è necessario trovare un modo per riordinare il codice in modo che l'iframe sia aggiunto solo dopo lo allo script della scheda e venga eseguito il relativo comportamento sul contenitore.

Chrome ha anche un'opzione che fa sì che l'iframe non si ricarichi se lo sposti con adoptNode anziché apendChild ma non credo che sia cross-browser.

per di più, si veda questo domanda simile: How to move an iFrame in the DOM without losing its state?