为了账号安全,请及时绑定邮箱和手机立即绑定

从执行的字符串中使用 VanillaJS 创建脚本元素

从执行的字符串中使用 VanillaJS 创建脚本元素

沧海一幻觉 2021-11-25 16:08:02
我得到字符串:'<script class="heyo">document.write("hello")<\/script>' 我必须用 VanillaJS 创建一个内联脚本元素。有没有办法触发脚本执行?有效但太复杂:const scriptString = '<script class="heyo">document.write("hello")<\/script>';document.body.insertAdjacentHTML('beforeend', scriptString);const pseudoScript = document.body.querySelector('.heyo');const newScriptEl = document.createElement('script');[...pseudoScript.attributes].forEach(attr => {    newScriptEl.setAttribute(attr.nodeName, attr.nodeValue);});newScriptEl.innerHTML = pseudoScript.text;document.body.append(newScriptEl);pseudoScript.remove();任何更好的想法表示赞赏。
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

我会说这或多或少是最好的方法。它“复杂”有什么关系?


我唯一没有改变的不是将原始脚本插入到“实时”页面中,而是插入到一个单独的元素中,这也有不硬编码类名的优点:


const scriptString = '<script class="heyo">document.write("hello")<\/script>';


const tempDiv = document.createElement("div");

tempDiv.innerHtml = scriptString;

const pseudoScript = tempDiv.firstChild;


const newScriptEl = document.createElement('script');

// ...


查看完整回答
反对 回复 2021-11-25
?
四季花海

TA贡献1811条经验 获得超5个赞

一个小解决方案,appendChild而不是insertAdjacentHTML:


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

var scriptCode = document.createTextNode("document.write('hello')");

scriptElement.appendChild(scriptCode); 


document.body.appendChild(scriptElement);


查看完整回答
反对 回复 2021-11-25
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信