どちらも「正しい」です。そしてどちらも、さまざまな目的でさまざまな時期に役立ちます。
たとえば、ページ速度に関しては、最近では次のようなことを行う方が高速です。
document.body.innerHTML = "<header>....big string o' html text</footer>";
ブラウザはそれを瞬時に吐き出します。
安全のために、ユーザー入力を扱うときは、要素を作成し、それらを にアタッチしてからdocumentFragment
DOM に追加する (または DOM ノードを新しいバージョンなどに置き換える) 方が安全です。
検討:
var userPost = "My name is Bob.<script src=\"//bad-place.com/awful-things.js\"></script>",
paragraph = "<p>" + userPost + "</p>";
commentList.innerHTML += paragraph;
対:
var userPost = "My name is Bob.<script src=\"//bad-place.com/awful-things.js\"></script>",
paragraph = document.createElement("p");
paragraph.appendChild( document.createTextNode(userPost) );
commentList.appendChild(paragraph);
悪いことをする人もいれば、しない人もいます。
もちろん、 を作成する必要はありません。ortextNodes
を使用できます(ブラウザは独自にテキスト ノードを作成します)。innerText
textContent
ただし、何をどのように共有するかを常に検討することが重要です。
信頼できる場所以外の場所から送信されている場合 (静的ページを提供していない限り、どこにもいないはずです。その場合、なぜ html を構築しているのでしょうか?)、インジェクションを念頭に置いておく必要があります。あなたは注射されたいです。