我得到字符串:'<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');
// ...
四季花海
TA贡献1811条经验 获得超5个赞
一个小解决方案,appendChild而不是insertAdjacentHTML:
var scriptElement = document.createElement("script");
var scriptCode = document.createTextNode("document.write('hello')");
scriptElement.appendChild(scriptCode);
document.body.appendChild(scriptElement);
添加回答
举报
0/150
提交
取消