你知道为什么下面这段代码没有将脚本元素添加到DOM中吗?
var code = "<script></script>";
$("#someElement").append(code);
你知道为什么下面这段代码没有将脚本元素添加到DOM中吗?
var code = "<script></script>";
$("#someElement").append(code);
当前回答
试试这个可能会有帮助:
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src","scriptAnalytics.js");
document.getElementsByTagName("head")[0].appendChild(fileref);
其他回答
你说“不工作”是什么意思?
jQuery检测到您正在尝试创建一个SCRIPT元素,并将自动在全局上下文中运行元素的内容。你是说这对你没用吗?-
$('#someElement').append('<script>alert("WORKING");</script>');
编辑:如果你在运行命令后没有在DOM中看到SCRIPT元素(例如在Firebug中),这是因为jQuery,就像我说的,将运行代码,然后将删除SCRIPT元素-我相信SCRIPT元素总是附加到主体…但无论如何,在这种情况下,位置对代码执行完全没有影响。
<script>
...
...jQuery("<script></script>")...
...
</script>
字符串字面值中的</script>终止整个脚本,以避免使用“</scr”+“ipt>”代替。
只需通过jQuery解析来创建一个元素。
<div id="someElement"></div>
<script>
var code = "<script>alert(123);<\/script>";
$("#someElement").append($(code));
</script>
工作示例:https://plnkr.co/edit/V2FE28Q2eBrJoJ6PUEBz
这是我认为最好的解决办法。谷歌分析就是这样注入的。
var (function(){
var p="https:" == document.location.protocol ? "https://" : "http://";
d=document,
g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
g.type='text/javascript';
g.src=p+'url-to-your-script.js';
s.parentNode.insertBefore(g,s); })();
如此:
$('body').append($("<script>alert('Hi!');<\/script>")[0]);
jQuery似乎在脚本上做了一些聪明的事情,所以你需要附加html元素而不是jQuery对象。