JavaScript - проблема с доступом к DOM динамически генерируемого локального iframe

У меня возникают проблемы с доступом к DOM документа содержимого iframe, если я создаю iframe динамически в JavaScript, а не жестко программирую его в HTML.

Я нахожу это до сих пор тестированием в Mac FF26 и Safari 6. Это локальный документ iframe на рабочем столе, поэтому не должно быть междоменных проблем.

Сгенерированный мною фрейм обычно отображается в окне браузера. Но при попытке доступа к нему с помощью contentDocument элемент body кажется пустым.

Это известная проблема? Возможно, я создаю свой iframe необычным способом:

var newIframe = document.createElement("iframe");
newIframe.id = "generatedIframe";
newIframe.src = "test.html";
document.body.appendChild(newIframe);
var iframeTag = document.getElementById("generatedIframe");


// the iframe will be appearing normally in the browser now


// but this fails -- innerHTML is empty string:

var iframeContent = iframeTag.contentDocument.getElementsByTagName("body")[0].innerHTML;

// same reference code works if the iframe is hard-coded in HTML instead

1 ответ

Решение

На самом деле ваша проблема не в том, как вы создали свой iframe.

Iframe DOM доступен только после его загрузки.

Код ниже иллюстрирует, что я имею в виду:

В вашем родительском окне контейнера:

<script>
    function doSomething() { alert(iframeTag.contentDocument.getElementsByTagName("body")[0].innerHTML()); }
</script>

В вашем документе iframe

<body onload="window.parent.doSomething();"></body>
Другие вопросы по тегам