我有一个第三方(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]);
},
答案 0 :(得分:1)
每当iframe或其祖先与DOM断开连接时,iframe的内容将被清除,并且当iframe或其祖先重新插入时,iframe将重新加载。这种令人讨厌的行为发生在Firefox和Webkit中,但我认为iframe不会在IE上重新加载。
作为一种变通方法,您需要找到一种方法来重新排序代码,以便仅在选项卡脚本完成对容器的操作后才添加iframe 。
Chrome显然还有一个选项,如果您使用adoptNode而不是apendChild移动iframe,则会导致iframe无法重新加载,但我不认为它是跨浏览器的。
了解更多信息,请参阅此类似问题:How to move an iFrame in the DOM without losing its state?