innerHTMLに設定したscript要素は無効になる。代替方法は?
JavaScriptではinnerHTMLプロパティに設定したscript要素は実行されません。
例えば、次のような記述です。
elem.innerHTML = '<script>alert("hello");</script>';
script要素が実行されないのは、安全性を考慮した上での仕様です。
上の記述でscript要素が実行できたら、危なくてしょうがないですよね。
scriptを実行するための代替方法
innerHTMLプロパティにscript要素を設定することができないため、 変わりにcreateElement()を使って、script要素を作成します。
次のようなコードとなります。
HTML
<p id="test"></p>
JavaScript
var elem = document.getElementById('test');
var s = document.createElement('script');
s.innerHTML = 'alert("hello")';
elem.appendChild(s);
まずcreataElement()でscript要素を作成します。
次に実行したい命令をinnerHTMLに設定します。
最後に appendChild()で追加すると、実行されます。
この方法ならinnerHTMLプロパティでscriptを実行することができます。