iframe内容在mootools操纵时消失

Aid*_*wen 6 javascript iframe mootools

我有一个第三方(mootools)库创建标签,我已经谷歌双击发布商(dfp)创建广告.dfp在iframe中创建广告,然后标签脚本抓取iframe的anchestor并用它来"混乱"以创建标签.iframe的内容在此过程中丢失.

我正在寻找一种方法来处理这个问题(尝试在标签加载后触发dfp内容但谷歌脚本崩溃了).

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]);
},
Run Code Online (Sandbox Code Playgroud)

hug*_*omg 1

每当 iframe 或其祖先与 DOM 断开连接时,iframe 的内容将被清除,并且当它或其祖先重新插入时,iframe 将重新加载。这种烦人的行为发生在 Firefox 和 Webkit 中,但我认为 iframe 不会在 IE 上重新加载。

作为解决方法,您需要找到一种方法来重新排序代码,以便仅在选项卡脚本完成对容器的操作后添加 iframe。

Chrome 显然还有一个选项,如果您使用 acquireNode 而不是 apendChild 移动 iframe,它会导致 iframe 不会重新加载,但我不相信它是跨浏览器的。

有关更多信息,请参阅类似的问题:How to move an iFrame in the DOM而不丢失其状态?