У меня есть iframe, который загружает некоторые javascript через javascript. Только в Internet Explorer, это работает тогда и только тогда, когда IE имеет кэшированную копию javascript. Это означает, что перезагрузка страницы (или иным образом запуск сценария для повторного запуска, если он застрял в функции или где-либо еще) приведет к тому, что этот код будет работать, в противном случае это не будет. В частности, происходит сбой вызова document.write.
Главная страница:
<iframe height = "200" width = "200" id = "happy">
</iframe>
<script type="text/javascript">
var a = document.getElementById("happy");
scripttxt = '<a href="#" id="joy">JOY</a><'+'script type="text/javascript" src="fail.js"></'+'script>';
a.src = "about:blank";
a.contentWindow.document.open();
a.contentWindow.document.write("<h3>Preview:</h3>" + scripttxt + "");
a.contentWindow.document.close();
</script>
* * 1005 fail.js
document.write(document.getElementById("joy"));
Я понимаю, что я мог бы использовать условные комментарии, чтобы IE пропускал document.open()
и document.close()
в скрипте главной страницы, но при этом IE пропускал document.open () и document.close () чувствовал себя немного странно (Правка) ... и ломает другие вещи в IE .
Edit:
При правильной работе iframe будет содержать под заголовком предварительного просмотра текст: JOYhttp://mymachine:myport/mainpage.htm#
, где JOY - гиперссылка. Когда это терпит неудачу, это пропустит http://mymachine:myport/mainpage.htm#
. На самом деле мне все равно, как document.write обрабатывает запись узла a
, просто то, что он может успешно получить элемент и что-то успешно написать.
Я также попробовал эту версию скрипта, по совету Джастина, но он ведет себя точно так же:
var a = document.getElementById("happy");
a.src = "about:blank";
r = document.createElement("a");
r.id="joy";
r.href="#";
r.innerText="JOY";
s = document.createElement("script");
s.src="fail.js";
a.contentWindow.document.body.appendChild(r);
a.contentWindow.document.body.appendChild(s);