11

我正在尝试执行以下操作(我正在使用原型库):

var div = document.createElement('div');
div.innerHTML = '<script src="somescript.js"></script>';
$('banner').insert(div);

在 IE 中,在我在第二行设置属性后,div.innerHTML 属性始终等于 ""。

该片段位于外部供应商脚本中覆盖 document.write() 的函数内部,这就是为什么我这样做而不是创建脚本元素并将其直接附加到 div 元素的原因。

任何帮助将不胜感激,这让我白发苍苍!

4

5 回答 5

12

这个也让我受阻了一点。事实证明,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;
}
于 2011-02-10T23:59:55.703 回答
7

您的脚本标签可能正在设法独立解释。尝试:

div.innerHTML = '<scr' + 'ipt src="somescript.js"></scr' + 'ipt>';
于 2009-07-01T11:13:46.153 回答
6

你可以尝试做这样的事情:

function loadScript(src) {
       var script = document.createElement("script");
       script.type = "text/javascript";
       document.getElementsByTagName("head")[0].appendChild(script);
       script.src = src;
}

或者做

..
div.innerHTML = "<script src=\"somescript.js\"></script>";
..
于 2009-07-01T11:13:32.880 回答
6

你需要使用转义字符</script>

div.innerHTML = '<script src="somescript.js"><\/script>';

看看为什么在 javascript '<\/script>' 中转义 /?

于 2011-03-29T17:24:47.520 回答
1

您是否尝试过添加内联 JS 而不是加载 .js 文件?我过去做过这件事,对我来说效果很好。不确定这是否仍然适用于最新的浏览器/安全问题。

HTH。

于 2009-07-01T11:07:44.823 回答