javascript - 如何使用纯javascript在当前网页中附加带有CSS、JS的HTML内容?

标签 javascript html

例如,

var newElement = document.createElement('div');
newElement.innerHTML = "<p>new content</p><script>alert('Hello World!')</script>";
element.appendChild(newElement);​​​​​​​​​​​​​​​​

结果:“新内容”被附加到页面中,但不会有警告说“Hello World!”

我尝试过innerHTML、insertAdjacentHTML、append、appendChild 方法。但问题是 JS 和 CSS 没有动态加载。

在 jQuery 中,after() 可以工作👍🏻

$(selector).after("<p>new content</p><script>alert('Hello World!')</script>");

是否有纯 JavaScript 的等价物?

最佳答案

您可以使用eval以字符串格式执行脚本。 jQuery 还在 DOM 操作的某些部分中使用了 eval

const content = "<p>new content<\/p><script>alert('Hello World!')<\/script>";
const newElement = document.createElement('div');
newElement.innerHTML = content
const scriptRegex = /(?<=<script>)(.*)(?=<\/script>)/g; //get scripts between script tags

const scripts = content.match(scriptRegex);
for(const script of scripts) {
  eval(script) //execute your string as a script
}

document.getElementById("content").appendChild(newElement);
<div id="content"></div>

旁注,对于您的情况,没有所谓的安全方法将字符串转换为脚本,因为有人可能会将恶意脚本注入(inject)您的字符串并在您不通知的情况下执行它们,因此您需要确保你所有的琴弦都在你的控制之下。您可以查看XSS attack为了更好的理解。

关于javascript - 如何使用纯javascript在当前网页中附加带有CSS、JS的HTML内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71831231/

相关文章:

javascript - 如何从 javascript(rhino) 中的 C# 类库访问公共(public)方法

Javascript:我正在尝试编写一个计算函数,它将 "add"两个数字并将结果打印为字符串,但我的语法不起作用

javascript - HTML Canvas 仅在浏览器调整大小后触发?

javascript - 单击按钮显示带有是/否选项的弹出框。查询/HTML

html - 使用浏览器 Logo

javascript - 更改 textNode 值

javascript - JS/d3.js - 删除/合并 d3.js 节点图中的重复链接

javascript - Amazon CloudFront - 限制 MP3 在特定网站上播放

html - ="search"类型的输入没有显示圆 Angular

html - 我想从元素选项卡的 Chrome 开发工具编辑我的 sass 文件,这可能吗?