9

我在 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)”上的“意外调用方法或访问属性”。

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

4

2 回答 2

5

正如您在 IE 中看到 appendChild(),不适用于<script>-elements。(好像 IE9 支持它,但它取决于浏览器模式)

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

_js.text = scriptContent; 
于 2011-08-17T10:07:52.960 回答
3

您的脚本是在 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;
}
于 2011-08-17T09:06:25.923 回答