Не могу добавить ребенка к узлу, созданному из другого фрейма - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть страница с 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>

В строке "fragment.appendChild(div);" появляется ошибка "Invalid argument". Кажется, ошибка связана с тем, что я создаю фрагмент документа из документа iframe и элемент div из родительского документа. Этот код работает, если оба используют один и тот же документ.

Я хочу сохранить любые события, которые могут быть присоединены к узлам DOM, поэтому я не хочу использовать innerHTML.

Кто-нибудь знает, как это исправить?

Ответы [ 3 ]

4 голосов
/ 18 февраля 2010

Ваша проблема в том, что вы не принимаете узлы во фрагмент, созданный в текущем документе. Используйте либо следующее:

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

или

fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));
2 голосов
/ 18 февраля 2010

Я просто рискну угадать здесь, но вы можете попробовать создать div, используя

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

вместо

var div = document.createElement("div") 

При использовании метода createElement () основного документа может возникнуть проблема с IE.

0 голосов
/ 18 февраля 2010

Я думаю, что нашел ответ здесь: http://www.alistapart.com/articles/crossbrowserscripting/

Импорт документов из двух разных свойств ownerDocument ... требует использования метода DOM Level 2 importNode (), поскольку в этих случаях DOM не разрешит простой document.appendChild ().

...