【问题标题】:Inserting some javascript code with Javascript使用 Javascript 插入一些 javascript 代码
【发布时间】:2011-12-07 06:50:48
【问题描述】:

我正在使用一种方法在页面中插入一些适用于所有浏览器但不适用于 IE 的 javascript 代码。这是一个示例: http://boxfly.free.fr/tmp/innerjs.html

IE不能正常工作的行是:

ele.text = document.getElementById('DIV_js').innerHTML ;

如果我将此行更改为:

ele.text = 'alert("Hello")' ;

它有效。但是我需要能够插入很多行的代码,而不仅仅是用于显示警报的一行,这就是为什么我使用 DIV 来包含 Javascript 代码... ;)

有谁知道如何让这个脚本在 IE 上工作:

<body>

<div id="DIV_js" style="display:none;">
var i = 'here' ;
function hello() {
  alert('toto says '  + i) ;
}
</div>
<script>

var ele = document.createElement("script") ;
ele.type = 'text/javascript' ;
ele.text = document.getElementById('DIV_js').innerHTML ;

document.body.insertBefore(ele, (document.getElementsByTagName("div"))[0]);

</script>

<span onClick="hello();">Click to display alert</span>

</body>

【问题讨论】:

  • 我认为,更好的方法是在运行时添加脚本,但要像 google 或 facebook 那样添加到头部:(function() { var ga = document.createElement('script'); ga .type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'ssl' : 'www') + '.google-analytics. com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 它不能在 IE6 上运行还是在 IE7 和 IE8 上也不能运行?该示例(在链接 boxfly.free.fr/tmp/innerjs.html 中)在 Win XP 上的 IE7 和 IE8 中为我工作。
  • @Manjula 是的,现在它可以在 IE7 到 9 上运行。如果有人对同一问题寻求帮助,我已经上传了脚本。我不测试 IE6 ;)

标签: javascript


【解决方案1】:

看看这是否适用于 IE:http://jsfiddle.net/nGxTf/

我将其更改为 eval() 调用,而不是将其插入到脚本元素中。

【讨论】:

  • 那么 - 这是否意味着这个答案对你有用?如果是这样 - 小心标记它吗?
【解决方案2】:

试试这个:

// The rest of the code above omitted for brievity
var ele = document.createElement("script");
ele.type = 'text/javascript';
ele.innerHTML = document.getElementById('DIV_js').innerHTML;

// Don't use getElementsByTagName, you risk inserting the script in more than one div
document.getElementById('yourDiv').appendChild(ele);

【讨论】:

    【解决方案3】:

    innerHTML 从 IE6 到 IE9 工作,但它有 bug。tbody 元素上的 innerHTML 在 IE 中是只读的

    【讨论】:

    • 没关系,感谢 Jake,它现在可以使用 IE。我已经上传了文件,对于想要将 Javascript 代码添加到 DIV 中的页面的人可能有用:boxfly.free.fr/tmp/innerjs.html 和 eval(ele.text);我们不再需要使用 document.body.insertBefore(...) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2012-03-28
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多