1

私はこのコードを持っています:

<script id="toModify" >
Invalid javascript that will cause errors
</script>

<script>
var s=document.getElementById("toModify");
s.innerHTML="alert('Hi')";
</script>

そして、それは機能しません。

それが機能するために私がしなければならないことが少なくとも2つあることを私は知っています:

  • 最初のスクリプトが最初に実行されないようにします。
  • 変更したら、最初のスクリプトを再実行します。

どうすればこれらのことができますか?他にやらなければならないことはありますか?

4

3 に答える 3

1
  • typeブラウザがスクリプトを実行しないように、属性を使用します。

    <script id="toModify" type="text/x-custom-whatever">...</script>
    
  • eval()それを実行するためのコードだけです。

もちろん、動的にコードを生成することには危険が伴います。セキュリティホールを導入しないように十分注意してください。

于 2012-07-02T18:47:49.320 に答える
1

サポートされていない「text/javascript」とは異なるタイプをスクリプトに設定すると、スクリプトが処理されなくなります。

それで<script id="toModify" type="text/unprocessed">...</script>

次に、タイプscriptの新しい要素を作成し、そのinnerHTMLを設定して、ドキュメントに追加します。

何かのようなもの

var s = document.getElementById("toModify");
var processed = document.createElement('script'); // create a new script element

processed.innerHTML = "alert('Hi')"; // or do something with the s.innerHTML
document.body.insertBefore(processed, document.body.firstChild); // add the new element to the body, it gets executed immediately..

http://jsfiddle.net/GG7cT/でのデモ

于 2012-07-02T18:51:09.130 に答える
-1

できません。最初のスクリプトは常に最初に実行されます。属性があってもdefer、内容を変更できるかどうかはわかりません。

この回答も参照してください。

于 2012-07-02T18:49:22.377 に答える