我正在尝试执行以下操作(我正在使用原型(prototype)库):
var div = document.createElement('div');
div.innerHTML = '<script src="somescript.js"></script>';
$('banner').insert(div);
在IE中,我在第二行设置属性后,div.innerHTML属性总是等于""。
此代码段位于一个函数内,该函数覆盖了外部 vendor 脚本中的 document.write(),因此这就是我这样做的原因,而不是创建脚本元素并将其直接附加到 div 元素。
真的很感激任何帮助,这让我头发花白!
最佳答案
这个也让我有点受阻。事实证明,IE 不允许直接通过 innerHTML 插入 JS,除非你包含 'defer' 属性(见下面的第二个链接)。此属性是 IE 独有的,并且显然允许 IE 将任何 JS 的执行推迟到加载其他标记之后。但是,警告...如果您包含两个脚本标记(就像我所做的那样),则无法保证哪个将首先执行,因为脚本似乎是异步加载的。如果您的脚本相互依赖(就像我的),这应该只是一个问题。
还有一个额外的警告......您必须在插入脚本的同时插入非脚本标记。无论有没有“延迟”属性,我都无法自行插入脚本标签。最后,脚本标签必须放在插入所有其他非脚本标记之后。否则,脚本标签将从插入的 HTML 中删除。
这里有一些引用:
MS innerHTML 引用:
http://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx
MS 延迟属性引用:
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;
}
关于javascript - 为什么我不能在 IE 中将包含脚本标签的字符串添加到 innerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1068517/