содержимое iframe исчезает при манипулировании mootools - PullRequest
6 голосов
/ 09 декабря 2011

У меня есть сторонняя (mootools) библиотека для создания вкладок, и я получил двойной щелчок Google для издателей (dfp), создающих рекламу. dfp создает рекламу в iframe, а затем скрипт tabs захватывает основатель iframe и «портит» его, создавая вкладки. Содержимое iframe теряется в процессе.

Я ищу способ справиться с этим (попытался запустить dfp после загрузки вкладок, но затем произошел сбой скриптов Google).

iframe принадлежит другому домену к родительскому окну, поэтому все, что пытается что-то сделать с элементами внутри iframe, завершится неудачей.

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]);
},

1 Ответ

1 голос
/ 23 мая 2012

Всякий раз, когда iframe или его предок отключены от DOM, содержимое iframe будет очищено, и iframe перезагрузится, когда его или его предка снова вставят обратно. Это раздражающее поведение происходит в Firefox и Webkit, но я думаю, что iframes не будут перезагружаться в IE.

В качестве обходного пути вам нужно будет найти способ переупорядочить код так, чтобы iframe добавлялся только после , когда скрипт tab выполняет свою функцию в контейнере.

Chrome, по-видимому, также имеет опцию, которая заставляет iframe не перезагружаться, если вы перемещаете его с acceptNode вместо apendChild, но я не верю, что это кросс-браузер.

для получения дополнительной информации см. Аналогичный вопрос: Как переместить iFrame в DOM без потери его состояния?

...