Почему бы просто не связать его с дочерним html?Он должен быть объявлен в его голове, так как дочерний HTML в любом случае должен иметь правильный DOM, вы должны включить его и в эту страницу.Это действительно не займет так много вашего веб-сервера, так как браузер распознает, что у него уже есть файл, и будет только тот, который загружен при посещении родительского HTML. РЕДАКТИРОВАТЬ: Хорошо, после некоторой дополнительной информации относительно потребностей этого сценария, вот пример кода сценария, который я написал.Это работает в моей тестовой среде, и я не понимаю, почему это не так в другой:
<script language="javascript">
function addCSS () {
// Connect to Child's DOM
var ifrm = document.getElementById('childFrame');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;//alert(ifrm.document.getElementsByTagName("head")[0].innerHTML);
// Get Child's head
var docHead = ifrm.document.getElementsByTagName("head")[0].innerHTML;
// Find all Parent's CSS files
var cssFiles = document.getElementsByTagName("head")[0].getElementsByTagName("link");
for (i=0; i<cssFiles.length; i++) {
if (cssFiles[i].getAttribute("type").toLowerCase() == 'text/css') {
ifrm.document.getElementsByTagName("head")[0].innerHTML = docHead+'\n<link rel="stylesheet" type="text/css" href="'+cssFiles[i].getAttribute("href")+'" />';
}
}
}
document.getElementById("childFrame").addEventListener("onload", addCSS());
</script>
Примечания:
1) Этот встроенный скрипт должен быть помещен ПОСЛЕ создания iframe.В качестве альтернативы, если вы можете, вы можете добавить атрибут «onload» к самому тегу iframe, вызывая эту функцию, и в этом случае этот встроенный JS должен быть помещен ДО IFrame.Между ними нет.
2) Многие из этих функций будут проще / короче, если вы будете использовать jQuery.Для тех, кто более знаком с JS, совершенно очевидно, что я даже не использовал функцию appendChild (), потому что, по моему опыту, эта функция не всегда работает в кросс-браузерной среде.В этой ситуации я полагаю, что мне это сойдет с рук так, как я это сделал, так как в противном случае мне пришлось бы каждый раз создавать тег link для дочернего элемента, а я теперь просто заполняю строку.
3) Очевидно, это document.getElementsByTagName("head")[0].getElementsByTagName("link")
излишне.Однако это гарантирует, что эта строка будет возвращать теги ссылок только из заголовка, а не откуда-либо еще ... на тот случай, если кодировщик родительского скрипта - идиот х).Если вы чувствуете, что эта идиотская защита настолько же излишня, как и вы, вы можете просто использовать document.getElementsByTagName("link")
вместо этого.
4) Это добавит ВСЕ CSS-файлы, загруженные в родительский элемент, вашему ребенку.
5) ... Я думаю, что-то забыл, но я не уверен, что ....