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>