0

例えば:

document.getElementById("test").innerHTML= "<script>document.write('worked')</script>";

結果は次のとおりです。

<div id="test"><script>document.write('worked')</script></div>

つまり、JS は実行されません。そもそも .innerhtml を「機能する」ようにしないのはなぜですか? 技術力の問題です。指定されたシナリオで DOM で JavaScript を実行することは可能ですか?

ありがとうございました

4

1 に答える 1

3

単純にスクリプト タグを含むものに innerHTML を設定するだけでは十分ではありません。script 要素を作成し、それを DOM に追加する必要があります。コンテンツの塊を大量に挿入する際に、クロスサイト スクリプティングを保護することが意図されていると思います。

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);

例: http://jsfiddle.net/axvaT/

document.writeあなたが思うようにはうまくいきません。 document.writescript タグがある場所にテキストを配置しません。代わりに、HTML パーサーが現在見ている場所にテキストを配置します。JS コードがいつ実行されるかによって、これらは同じ場合もあれば、まったく異なる場合もあります。

このため、とりわけ、document.write何にも使用しないでください。これまで。 デバッグも。


最後に、他の js ファイルを指すスクリプト タグを挿入すると便利な場合もあります。

var script = document.createElement('script');
script.src = 'somefile.js';
document.head.appendChild(script);

JS を含む script タグでこれを行うのは意味がありません。JavaScript を使用して、JavaScript をすぐに実行するスクリプト タグを作成しています。新しいスクリプト タグを作成して実行するのではなく、実行したい JavaScript を実行してみませんか?

だからしないでください:

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);

代わりに次のようにします。

alert('ran some JS');
于 2013-07-19T21:20:59.663 に答える