gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:14:35 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com