javascript - 为什么我不能在 IE 中将包含脚本标签的字符串添加到 innerHTML

标签 javascript innerhtml

我正在尝试执行以下操作(我正在使用原型(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/

相关文章:

javascript - 如何强制下载未使用的 CSS 图像?

javascript - SAP Cloud SDK for JavaScript 的 AttachmentService 问题

javascript - 使用innerHTML 在悬停时显示图像图例(不是作为工具提示)?

javascript - 设置 innerhtml 时出现 IE 未知运行时错误

javascript - 在不关闭 websockets 的情况下更改 Firefox 中的 window.location.href

javascript - 如何使嵌入的 YouTube 视频连续重播?

javascript - 使用什么来代替 document.write 或 InnerHTML?

Javascript Innerhtml - 奇怪的样式

javascript - Web 组件内容未呈现

javascript - 如何在每次单击按钮时创建一个新的 div?