【问题标题】:How to append a raw JavaScript tag to document.body without jQuery如何在没有 jQuery 的情况下将原始 JavaScript 标记附加到 document.body
【发布时间】:2023-03-02 23:44:01
【问题描述】:

我从服务器得到一个原始的 JavaScript 标记:

"<script>alert('hi');</script>"

现在,我需要将它附加到 &lt;body&gt; 以便它触发。我不能简单地创建一个新的脚本元素,因为这个字符串已经包含了&lt;script&gt; 部分。有没有类似的东西

child = document.createElementFromHTML("<script>alert('hi');</script>");
document.body.appendChild(child)

感谢您的帮助。

编辑

这就是为什么它不是重复的大厅监视器:

如果您将 div 的内部 html 设置为脚本,它将不会触发。我需要将仅从文本生成的元素附加到正文。

编辑 2

最终解决方案:

window.onload = function() {
document.body.innerHTML += "<script>alert('hi');</script>";
var script = document.scripts[document.scripts.length - 1];
var s = document.createElement("script");
s.textContent = script.textContent;
document.body.removeChild(script);
document.body.appendChild(s);
}

【问题讨论】:

  • “我不能简单地创建一个新的脚本元素,因为这个字符串已经包含了该部分。” 如果删除该部分会怎样? str.replace(/^&lt;script&gt;|&lt;\/script&gt;$/g, '').
  • 我永远不会明白为什么人们免费为 SO 工作。干得好,大厅监视器。
  • "/" 字符串中"&lt;/script&gt;" 处的字符应被转义。

标签: javascript dom appendchild


【解决方案1】:

您可以将document.body.innerHTML&lt;script&gt; html 字符串连接起来,在document 中获取最后一个script.textContent,创建script 元素,将script 元素.textContent 设置为从连接的@ 中检索的值987654329@&lt;script&gt; 字符串,删除最后一个&lt;script&gt;,将新的&lt;script&gt; 附加到document.body

<script>
  document.body.innerHTML += "<script>alert('hi');<\/script>");
  var script = document.scripts[document.scripts.length - 1];
  var s = document.createElement("script");
  s.textContent = script.textContent;
  document.body.removeChild(script);
  document.body.appendChild(s);
</script>

【讨论】:

  • 这很接近,它假设 document.body 可用,通过将其包装在 document.onload 中它可以工作,我将在帖子中添加最终解决方案,感谢您不是一个 SO dou che 和驳回我的问题,这非常有帮助
【解决方案2】:

这样你就可以在你的HTML中插入&lt;script&gt;标签

var script = document.body.appendChild(document.createElement('script'));
script.text = 'alert("Hi!");'

【讨论】:

  • 这行不通,因为我事先不知道脚本是什么,它作为字符串来自服务器。
  • 你能不能让服务器只返回alert("Hi!");没有脚本标签。我的意思是只有没有标签的脚本内容。
  • 不,但我想知道我是否可以使用替换来去除开始和结束标签
  • 是的,这是个好主意,或者只是尝试通过使用拆分功能在'
  • 我发现了这个,它有效,因为它确实附加了脚本,但脚本没有触发,知道为什么吗? stackoverflow.com/questions/9334645/…
猜你喜欢
  • 2022-10-07
  • 2015-10-13
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
相关资源
最近更新 更多