包含具有相同URL的另一个IFRAME的IFRAME是否有限制?

时间:2011-05-09 08:42:54

标签: javascript html dom iframe

为了在框架层次结构中玩一下,我写了一个小的html页面,它允许嵌套任意数量的帧(问题末尾可用的代码)。

然而,这不起作用,在IE9和Firefox 4上创建了内部框架但未呈现(headbody为空):

frames screenshot

在Chrome上,它适用于两个级别,然后如果我单击内部框架上的Add按钮,则没有任何反应(控制台中也没有错误消息)。

如果我复制文件N次并让每个文件使用不同的文件,它适用于任何深度(但如果有一个循环则不行)。

我试图搜索这样的限制,但我不能使用正确的关键字。有没有人对此有任何参考?

以下是 addRemoveFrames.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Add and Remove Frames</title>
    <script type="text/javascript">
        function add() {
            var f = document.createElement('iframe');
            f.src = 'addRemoveFrames.html';
            document.getElementById('frameContainer').appendChild(f);
        }
        function remove() {
            var c = document.getElementById('frameContainer');
            var f = c.lastChild;
            if (f)
                c.removeChild(f);
        }
    </script>
</head>
    <body>
        <input type="button" onclick="add()" value="Add"/>
        <input type="button" onclick="remove()" value="Remove"/>
        <hr />
        <div id="frameContainer"></div>

    </body>
</html>

我稍微修改了@davin的答案,因此每个框架的网址都反映了其在层次结构中的完整路径。

var counter = 0;
function add() {
    var f = document.createElement('iframe');
    var sep = location.search ? (location.search + '.') : "?";
    f.src = 'addRemoveFrames.html' + sep + ++counter;
    document.getElementById('frameContainer').appendChild(f);
}

3 个答案:

答案 0 :(得分:12)

看起来像一个合理的浏览器安全机制,以防止嵌套iframe的无限循环(即使在你的情况下,它不会是无限的)。

在任何情况下,一个简单的解决方法可能是在网址中添加一个无用的查询参数,使浏览器认为加载的页面不相同,但实际上是。

所以不是你当前的函数add(),而是这样的(我全力以赴,所以id不会对全局命名空间进行规范):

var add = (function(){

  var id = 0;
  return function(){
     var f = document.createElement('iframe');
     f.src = 'addRemoveFrames.html?useless=' + id++;
     document.getElementById('frameContainer').appendChild(f);
  };

})();

答案 1 :(得分:7)

以下是官方参考:Implementing HTML Frames - W3C Working Draft 31-Mar-97。标题是“无限递归”,并指出如果src等于父URL,则应将其视为空。

我建议使用davin使用的技术,或者使用纯DOM来创建嵌套元素而不是IFRAME,这样可以使编程更改更容易并且可能使用更少的内存,并避免出现问题加载延迟。

答案 2 :(得分:0)

chrome 我使用chrome进行了测试,最大图像嵌套为4。第二个“ asd”(红色的)内部为iframe,但其为空

如果我包括第三页,则嵌套会增加

enter image description here

结论:取决于URL,如果您有无限数量的嵌套UNIQUE URL,则可以无限期嵌套