你知道为什么下面这段代码没有将脚本元素添加到DOM中吗?
var code = "<script></script>";
$("#someElement").append(code);
你知道为什么下面这段代码没有将脚本元素添加到DOM中吗?
var code = "<script></script>";
$("#someElement").append(code);
当前回答
可以这样试试
var code = "<script></" + "script>";
$("#someElement").append(code);
你不能做“<script></script>”的唯一原因是因为字符串在javascript中是不允许的,因为DOM层不能解析什么是js什么是HTML。
其他回答
只需通过jQuery解析来创建一个元素。
<div id="someElement"></div>
<script>
var code = "<script>alert(123);<\/script>";
$("#someElement").append($(code));
</script>
工作示例:https://plnkr.co/edit/V2FE28Q2eBrJoJ6PUEBz
你不需要jQuery来创建一个Script DOM元素。它可以用香草ES6这样做:
const script = "console.log('Did it work?')"
new Promise((resolve, reject) => {
(function(i,s,o,g,r,a,m){
a=s.createElement(o),m=s.getElementsByTagName(o)[0];
a.innerText=g;
a.onload=r;m.parentNode.insertBefore(a,m)}
)(window,document,'script',script, resolve())
}).then(() => console.log('Sure did!'))
它不需要包装在Promise中,但是这样做允许您在脚本加载时解析Promise,有助于防止长时间运行的脚本出现竞争条件。
在脚本文件中添加sourceURL会有帮助,如本页所述: https://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
在脚本文件中,添加一个带有sourceURL的语句,如"//@ sourceURL=foo.js" 使用jQuery $.getScript()加载脚本,脚本将在chrome开发工具的“sources”选项卡中可用
可以这样试试
var code = "<script></" + "script>";
$("#someElement").append(code);
你不能做“<script></script>”的唯一原因是因为字符串在javascript中是不允许的,因为DOM层不能解析什么是js什么是HTML。
你说“不工作”是什么意思?
jQuery检测到您正在尝试创建一个SCRIPT元素,并将自动在全局上下文中运行元素的内容。你是说这对你没用吗?-
$('#someElement').append('<script>alert("WORKING");</script>');
编辑:如果你在运行命令后没有在DOM中看到SCRIPT元素(例如在Firebug中),这是因为jQuery,就像我说的,将运行代码,然后将删除SCRIPT元素-我相信SCRIPT元素总是附加到主体…但无论如何,在这种情况下,位置对代码执行完全没有影响。