如何在 JavaScript 中附加 <script></script> ?

IT技术 javascript jquery append appendchild
2021-02-02 22:43:24

我需要使用appendChild()或 jQuey'sappend()将一些<script>标签内容附加到文档中。据我所知,这正在被剥离。有谁知道怎么做?

6个回答
// Create the element

var script = document.createElement("script");

// Add script content

script.innerHTML = "...";

// Append

document.head.appendChild(script);

或者

document.body.appendChild(script);
这应该是接受的答案。当前接受的答案不允许以这种方式加载 jQuery。
2021-03-13 22:43:24
我不会使用innerHTML,但是script.src
2021-03-16 22:43:24
由于本机实现而加一
2021-04-10 22:43:24

试试这个:

var s = document.createElement("script");
s.type = "text/javascript";
s.src = "http://somedomain.com/somescript";
$("head").append(s);

请注意,脚本将加载并且您可以访问其中的变量,但您不会<script>在 DOM 中看到实际的标记。

检查元素,你会看到
2021-03-16 22:43:24
此方法会生成警告,提示同步加载脚本不利于用户体验。假设您要在正在加载的 javascript 中调用某些内容,则应异步加载它,并使用回调方法来运行依赖于新脚本的代码。 stackoverflow.com/questions/7718935/...
2021-03-27 22:43:24
s.type是不是需要,shorterbetter
2021-03-30 22:43:24
您可以将 async 设置为 true。
2021-04-02 22:43:24
$('<script>alert("hi");</' + 'script>').appendTo(document.body);

演示

你不能这样做的唯一原因$('<script></script>')是因为</script>javascript 中不允许使用字符串,因为 DOM 层无法解析什么是 js,什么是 html。你甚至$('<script><\/script>')可以绕过这个限制
2021-03-21 22:43:24
好的!谢谢(你的)信息。
2021-03-22 22:43:24
很酷,但这是如何工作的?我已经知道这个修复程序大约一年了,但仍然没有任何线索。
2021-04-08 22:43:24

如果您需要附加一个脚本以便对其进行解析,您可以像谷歌对他的 +1 按钮所做的那样

  (function() {
    var po = document.createElement('script');
    po.type = 'text/javascript';
    po.async = true;
    po.src = 'link to your script here';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(po, s);
  })();
如果您的 HTML 中没有任何脚本标记,此代码将崩溃(s 未定义)(例如:<!DOCTYPE html><title>Hello, World!</title>-这是有效的 HTML)
2021-03-19 22:43:24
做得很好...你应该把这个函数调用放在哪里?有关系吗?head body
2021-03-27 22:43:24
不,它应该只在 dom 中......只是......
2021-04-10 22:43:24

这对我有用..

<script>
    $('head').append("<script>your script content here<\/script>");
</script>

请注意,内部的“/”</script>已转义为"<\/script>". 如果不是,它实际上关闭了外部<script>标签。

添加的脚本不可见,但会被执行。希望有帮助。

我用我的脚本尝试了所有其他方法,但这是唯一有效的方法!非常感谢你!
2021-03-11 22:43:24