1

我的页面上有一个广告单元,它只是一个 iframe。当页面加载时,可以在 iframe 中显示几个不同的广告。iframe 中有一段 javascript 尝试使用以下方法呈现第一个广告单元:

document.open();
document.write(ad_tag1);
document.close();

第一个广告单元将以某种概率呈现广告,否则它将向广告单元 iframe 触发一个 postmessage 事件,指示没有广告可显示。

如果有广告要展示,一切都是金色的。但是,如果没有,广告单元将继续执行以下操作:

document.open();
document.write(ad_tag2);
document.close();

这会导致第二个广告代码正常呈现。然而,问题是 Firefox 似乎无法检测到第二个广告单元何时加载,即使它显然已经加载,并且页面顶部的微调器一直在旋转,就好像还有东西要加载一样。

我也尝试过使用诸如 innerHTML 之类的 DOM 操作方法,但这产生了同样的问题。我也尝试使用 Prototype JS 的内置更新方法,但这也导致了同样的问题。

任何人都知道为什么 Firefox 会这样做?我的代码在 chrome 上完美运行..

此外,我无法控制广告标签是什么。广告标签是第三方的,从我的角度来看也可能是黑盒子,因为广告标签中可能包含脚本,可能会删除 iframe 等。

4

1 回答 1

0

我以前见过这个,好几次了。它几乎总是由写入文档的格式错误的 HTML 或不完整的 HTML 引起的。考虑:

<html>
   <div id="myadd2">
       <p>Some stuff<p>
   </div>

没有结束</p>,也没有结束<html>标签。这可能会导致 Firefox 认为文档仍在加载中。直到它收到来自服务器的 EOF(关闭连接)或者它看到关闭的 HTML 标记和一个格式良好的 HTML 块,它才会完成。

可能是第二个添加包含不匹配的引号、未终止的 html 标记或不匹配的标记。运行 HTML 内容xmllint --html以查看它的想法。

于 2013-08-16T16:02:16.980 回答