在Javascript中使用IE的appendChild

Using appendChild with IE in Javascript

本文关键字:IE appendChild Javascript      更新时间:2023-09-26

我在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)"。

有办法解决这个问题吗?

您可以看到IE中的appendChild()并不适用于<script> -元素。(似乎IE9支持它,但这取决于浏览器模式)

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

_js.text = scriptContent; 

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

您可以看到在加载页面后调用该代码时的工作情况,例如在函数

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