【问题标题】:Firefox not detecting iframe load event?Firefox 没有检测到 iframe 加载事件?
【发布时间】:2013-08-19 01:45:51
【问题描述】:

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

【问题讨论】:

    标签: javascript html firefox iframe


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我不这么认为。即使在简单的事情上做一个 document.write:

      Hello

      也会导致 firefox 永远加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2012-10-24
    • 2014-07-09
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多