I hava an iframe which loads some javascript via javascript. In internet explorer only, this works if and only if IE has a cached copy of the javascript. This means that reloading the page (or otherwise triggering the script to run again, if it's stuck in a function or whatever) will cause this code to work, otherwise it will not. In particular, the document.write call fails to happen.
Main Page:
<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>
fail.js:
document.write(document.getElementById("joy"));
I realize I could use conditional comments to have IE skip document.open()
and document.close()
in the script of Main Page, but having IE skip document.open() and document.close() feels a bit hacky (Edit)...and breaks other things in IE.
Edit:
When it works properly, the iframe will contain, under the preview heading, the text: JOYhttp://mymachine:myport/mainpage.htm#
, where JOY is a hyperlink. When it fails, it will omit http://mymachine:myport/mainpage.htm#
. I don't actually care how how document.write handles writing the a
node, just that it is able to get the element successfully and write something successfully.
I also tried this version of the script, at Justin's advice, but it behaves exactly the same:
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);