在Javascript中使用appendChild和IE

时间:2011-08-17 08:58:47

标签: javascript internet-explorer appendchild

我在IE中使用此代码时遇到问题(使用Chrome似乎工作正常):

<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>

我在Internet Explorer(IE9)中遇到的错误是:“语句”_js.appendChild(textNode)上的“意外调用方法或访问属性”。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

正如您所见,IE中的here appendChild()未应用于<script> - 元素。 (好像IE9支持它,但它取决于浏览器模式)

Nivas之前有一个正确的答案,遗憾的是它已被删除。 在IE中使用

_js.text = scriptContent; 

答案 1 :(得分:3)

您的脚本在DOM准备好之前正在执行,因此获取<body>标记是竞争条件。实际上我在Chrome 15和Firefox 8中遇到了同样的错误。

您可以在加载页面后调用代码works,例如在函数中

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;
}