如何使用innerHTML插入javascript(ie6给我一个未知的运行时错误)

Posted

技术标签:

【中文标题】如何使用innerHTML插入javascript(ie6给我一个未知的运行时错误)【英文标题】:How to insert javascript using innerHTML (ie6 is giving me a unknown runtime error) 【发布时间】:2010-12-11 06:25:57 【问题描述】: var head =document.getElementsByTagName("head")[0]; newScript = document.createElement('script'); newScript.type = '文本/javascript'; newScript.innerhtml = '$(window).load(function() someFooo(); ); '; head.appendChild(newScript);

这会导致 IE6 中出现未知的运行时错误。有没有其他办法解决这个问题?

【问题讨论】:

谁能告诉我IE6是什么?我隐约记得有人在五年前使用它,但我不确定。 【参考方案1】:

改用text property:

newScript.text = '$(window).load(function() someFooo(); );';

这也适用于非 IE 浏览器。我在 FF2、FF3、FF3.5、Safari 4 (win)、Opera 9+、Chrome 2、Chrome 3 中使用过它,它们都可以工作。

根据规范(我必须这样说,否则我会感到误导),您应该使用appendChild

var script = '$(window).load(function() someFooo(); );';
newScript.appendChild(document.createTextNode(script));

但这在 IE 中失败了(<script> 元素不允许有孩子或其他一些愚蠢的 IE 事物)。所以就选择前者吧。

【讨论】:

【参考方案2】:

看起来这是在只读元素中使用 innerHTML 的问题。当您尝试在 tbody 中设置 innerHTML 时也会发生这种情况。根据msdn documentation:

(...) 这样做也可以有点 棘手,因为你不能使用 innerHTML 注入 HEAD 或 STYLE 元素直接。 (这两个 标签是只读的。)最好的方法 动态添加样式到页面是为了 等待文件加载,然后 然后以新样式创建规则 表。

为什么它是只读属性?这是explanation。

因此,您需要使用 DOM 方法来执行此动态加载。检查this link 加载外部javascript 资源和this one 内联脚本这是你的情况。

    newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    var head = document.getElementsByTagName("head")[0];  
    var src = '$(window).load(function() someFooo(); ); ';
    newScript.text = src;
    head.appendChild(newScript);

【讨论】:

以上是关于如何使用innerHTML插入javascript(ie6给我一个未知的运行时错误)的主要内容,如果未能解决你的问题,请参考以下文章

innerHtml 替换插入图片 Javascript

JavaScript--插入DOM

PHP-在表格的每一行中动态插入带有javascript的innerhtml

全栈JavaScript之路(十九)HTML5 插入 html标记 ( 一 )innerHTML 与outerHTML

javascript中的innerHTML是什么意思,怎么个用法?

使用innerhtml将脚本标签插入到html元素中[重复]