、私がしなければ:文書に添付された<script>タグは、どのブラウザで自動的に評価されますか?多くのブラウザで
var x = document.createElement("SPAN");
x.innerHTML = "<script>alert(1);</script>";
document.body.appendChild(x);
ノーアラートが発生します。
どのブラウザがありますか?もしそうなら、どちらのもの?
、私がしなければ:文書に添付された<script>タグは、どのブラウザで自動的に評価されますか?多くのブラウザで
var x = document.createElement("SPAN");
x.innerHTML = "<script>alert(1);</script>";
document.body.appendChild(x);
ノーアラートが発生します。
どのブラウザがありますか?もしそうなら、どちらのもの?
なし。 innerHTMLはスクリプト要素を実行しません(defer属性を持っていない限り、それは普遍的ではないと思います)。
私は以下のテストを行っていませんが、DOMとJSをサポートしているブラウザの間で普遍的にサポートされている必要があります。
var script = "alert(1)";
var script_node = document.createTextNode(script);
var script_element = document.createElement('script');
script_element.type = "text/javascript";
script_element.appendChild(script_node);
document.body.appendChild(script_element);
はダビデは動作しないでしょう.innerHTML
を使用して、指摘したように。
ほとんどの人がDOMに追加するといいと思いますが、この方法はSafari 2.0では動作しません。
最善の方法、scriptaculousに使用されるもの、document.write()
を使用することです:
// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript">alert("hi");<\/script>');
innerHTMLプロパティを経由してスクリプトを追加すると、私の知っている任意のブラウザでは動作しません。 domを介してスクリプトノードを追加することは、IEでは機能しません。ページに挿入するスクリプトタグを含むhtml文字列がある場合は、スクリプトタグのコンテンツを抽出してそれを評価するのが最善の方法です。プロトタイプライブラリには、これを正確に行う便利な機能(htmlやevalスクリプトなどを挿入するための他の関数と同様に)が便利なevalScriptsという機能があります。
document.writeは完全なDOMを持つページでは機能しません(通常はinnerHTMLについて考えるようになります)。Safari 2の市場シェアは非常に小さいです。 Windowsシステム(IE6の遺産を残し続けている)以上にアップグレードされる傾向のあるプラットフォームでは、安定版の後ろに2つのバージョンがあります。 – Quentin