无法将fromChild附加到从另一个帧创建的节点

时间:2010-02-17 20:59:52

标签: javascript dom iframe frames

我有一个包含iframe的页面,并希望从子框架中提取DOM节点并将其放在父页面上。这适用于Firefox(3.5),但不适用于Internet Explorer(7)。

我已经将代码分解为最简单的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
<title>Fragment</title>
</head>

<body>

<iframe src="blank.html"></iframe>

<script type="text/javascript">
window.onload = function () {
    var fragment = document.createDocumentFragment();
    var div = frames[0].document.createElement("div");
    fragment.appendChild(div);
};
</script>

</body>
</html>

我在“Invalid argument”行上收到错误“fragment.appendChild(div);”。该错误似乎源于我正在从iframe的文档创建文档片段以及从父文档创建div元素。如果两者都使用相同的文档,则此代码有效。

我想保留任何可能附加到DOM节点的事件,所以我不想使用innerHTML。

任何人都知道修复此问题吗?

3 个答案:

答案 0 :(得分:4)

您的问题是您没有将节点采用到当前文档中创建的片段中。使用以下任一项:

fragment.appendChild(fragment.ownerDocument.createElement("div"));

fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));

答案 1 :(得分:2)

我在这里只是猜测,但您可以尝试使用

创建div
var div = frames[0].document.createElement("div") 

而不是

var div = document.createElement("div") 

使用主文档的createElement()方法可能是IE出现问题的原因。

答案 2 :(得分:0)

我想我在这里找到了答案:http://www.alistapart.com/articles/crossbrowserscripting/

  

从两个不同的ownerDocument属性导入文档...需要使用DOM Level 2方法importNode(),因为在这些情况下DOM不允许使用简单的document.appendChild()。