0

我有一个网页,它使用 iframe 嵌入我们的另一个网站。但是,FireFox 在呈现 iframe 的内容时遇到问题。当我检查 DOM 中的原始 html 时,我注意到 iframe 中的以下 DOM 结构:

#document
    <!DOCTYPE html>
    <html>
        <body></body>
        <head> … </head>
        <body> … </body>
    </html>

注意 head 标签上方的 body 标签——它不在源 DOM 中!从开发人员工具中删除它可以修复所有渲染问题。出于某种原因,FireFox 在 head 标签之前添加了第二个 body 标签。这是我的谜题:

  1. 额外的正文不在交付的源 HTML 中
  2. 额外的标签只显示在 FireFox、Chrome 和 IE 中没有它的 iframe
  3. 如果我直接转到 iframe 在 FireFox 中加载的 url,则额外的 body 标签不存在!
  4. 我没有插件 - FireFox 安装很干净
  5. 截至本文发布时,我拥有最新的 FireFox (v24.0)

有谁知道这可能是什么原因造成的?嵌入的站点非常简单,并且没有任何可以添加此额外标记的 javascript。

4

1 回答 1

0

我不知道是什么原因导致某些 FF iframe 而不是其他 iframe 发生这种情况,但如果您有权更改加载到 iframe 中的页面代码,则可以添加此脚本以删除第一个空的身体标签:

<script type="text/javascript">
    var ffFixCount = 0,
    clearExtraBody = function(){
        var bodies = document.getElementsByTagName("body");
        if(bodies.length > 1){
            // assumes the empty, extra body tag you want to remove is the first one
            bodies[0].parentNode.removeChild(bodies[0]);
            window.clearInterval(ffBodyFixer);
        }else{
            ffFixCount++;
        }
        if(ffFixCount = 20){
            window.clearInterval(ffBodyFixer);
        }
    };

    //check for extra body tag will run every 100ms, 
    // 20 times, or, for 2 seconds (to give time for bug to happen)
    // or will stop if extra body tag is found
    var ffBodyFixer = window.setInterval(
        function(){     
           window.clearExtraBody();
        }, 100);
</script>
于 2015-02-13T16:30:09.700 回答