Firefox未检测到iframe加载事件

Firefox not detecting iframe load event?

本文关键字:加载 事件 iframe 检测 Firefox      更新时间:2023-09-26

我的页面上有一个广告单元,它只是一个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等。

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

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

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

第二次添加可能包含不匹配的引号、未终止的html标记或不匹配的标记。通过xmllint --html运行HTML内容,看看它对它的看法。