问题
I am having trouble with this code in IE (with Chrome it seems to work fine):
<html>
<body>
<script type="text/javascript">
var scriptContent = "var whatever=1";
var _js = document.createElement('script');
_js.setAttribute('type', 'text/javascript');
textNode = document.createTextNode(scriptContent);
_js.appendChild(textNode);
document.getElementsByTagName('body')[0].appendChild(_js);
</script>
</body>
</html>
The error I get in Internet Explorer (IE9) is: "unexpected call to a method or access to a property" on statement "_js.appendChild(textNode)".
Is there any way to work around this problem?
回答1:
As you can see here appendChild()
in IE is not applied to <script>
-elements.
(Seems as if IE9 supports it, but it depends on the browser-mode)
There was an correct answer before by Nivas, unfortunately it has been deleted. In IE use
_js.text = scriptContent;
回答2:
Your script is being executed before the DOM is ready, so getting the <body>
tag is a race condition. I actually get the same error in Chrome 15 and Firefox 8.
You can see the code works when called after the page is loaded, for example in a function
HTML
<a href="#" onclick="return append()">append</a>
JavaScript
function append() {
var scriptContent = "var whatever=1";
var _js = document.createElement('script');
_js.setAttribute('type', 'text/javascript');
textNode = document.createTextNode(scriptContent);
_js.appendChild(textNode);
document.getElementsByTagName('body')[0].appendChild(_js);
return false;
}
来源:https://stackoverflow.com/questions/7090198/using-appendchild-with-ie-in-javascript