这个也让我受阻了一点。事实证明,IE 不允许直接通过 innerHTML 插入 JS,除非您包含 'defer' 属性(参见下面的第二个链接)。此属性是 IE 独有的,并且显然允许 IE 将任何 JS 的执行推迟到加载其他标记之后。但是,一个警告...如果您包含两个脚本标签(就像我所做的那样),则无法保证哪个会首先执行,因为脚本似乎是异步加载的。如果您的脚本相互依赖(就像我的那样),这应该只是一个问题。
还有一个额外的警告......您必须在插入脚本的同时插入非脚本标记。我无法自己插入脚本标签,不管有没有'defer'属性。最后,必须在插入所有其他非脚本标记之后放置脚本标记。否则,脚本标签将从插入的 HTML 中删除。
以下是一些参考资料:
MS innerHTML 参考:
http://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx
MS Defer 属性参考:
http://msdn.microsoft.com/en-us/library/ms533719%28v=vs.85%29.aspx
通过代码插入脚本的示例(是的,它确实有效):
http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/insertScript_2.htm
我的测试代码:
// I downloaded the MS example file above and tweaked their script a bit,
// resulting in this. Using the proper approach to the defer property
// (namely: defer="defer") did not provide me with consistent results, so
// sticking with 'DEFER' may be necessary.
// Note: Try moving the 'sHTML' variable to the end of the script string.
function insertScript2()
{
var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me'><BR>";
var sScript = sHTML + "<SCRIPT DEFER type='text/javascript'> function go2(){ alert('Hello from inserted script.') } </SCRIPT" + ">";
ScriptDiv.innerHTML = sScript;
}