如何使用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给我一个未知的运行时错误)的主要内容,如果未能解决你的问题,请参考以下文章
PHP-在表格的每一行中动态插入带有javascript的innerhtml
全栈JavaScript之路(十九)HTML5 插入 html标记 ( 一 )innerHTML 与outerHTML