JavaScriptで、HTMLテキストをもとにDOMを追加する場合、例えば、

const doctext = `<script>alert("test")</script>`
document.getElementById("aaa").innerHTML = doctext;

のように、innerHTMLでDOMを追加した時には、scriptタグを追加しても実行されません。そこで、HTMLの中身のscriptタグ全てを実行するようにHTMLを追加するコードを紹介します。

scriptタグを実行しながらHTMLを追加する関数

ES6に対応しています。

window.setInnerHTML = function(elm, html) {
  elm.innerHTML = html;
  Array.from(elm.querySelectorAll("script")).forEach( oldScript => {
    const newScript = document.createElement("script");
    Array.from(oldScript.attributes)
      .forEach( attr => newScript.setAttribute(attr.name, attr.value) );
    newScript.appendChild(document.createTextNode(oldScript.innerHTML));
    oldScript.parentNode.replaceChild(newScript, oldScript);
  });
}

使い方

const doctext = `<script>alert("test")</script>`
setInnerHTML(document.getElementById("aaa"),doctext);
Javascript