在FireFox中使用iframe会添加额外的标签吗?

时间:2013-10-16 21:06:56

标签: firefox iframe

我有一个网页,它使用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中没有iframes
  3. 如果我直接找到iframe在FireFox中加载的网址,那么额外的正文标记就不存在了!
  4. 我没有插件 - FireFox安装很干净
  5. 我发布了此帖(v24.0)
  6. 的最新FireFox

    有谁知道造成这种情况的原因是什么?嵌入的网站非常简单,没有任何可以添加此额外标记的JavaScript。

1 个答案:

答案 0 :(得分:0)

我不知道是什么导致在某些FF 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>