2009-07-01 9 views
10

にinnerHTMLプロパティにスクリプトタグを含む文字列を追加することはできません。 2番目の行にプロパティを設定すると、プロパティは常に ""に等しくなります。は、なぜ私は(私はプロトタイプのライブラリを使用しています)次のことをやろうとしているIE

このスニペットは、外部のベンダースクリプトでdocument.write()をオーバーライドする関数の中にあります。そのため、スクリプト要素を作成してdiv要素に直接追加するのではなく、このようにしています。

本当にありがとうございます、これは私に灰色の髪を与えています!

+0

(1)良い質問を参照してください。 –

答えて

6

あなたは、代わりにこのような何かしようとすることができます:

function loadScript(src) { 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     document.getElementsByTagName("head")[0].appendChild(script); 
     script.src = src; 
} 

または

.. 
div.innerHTML = "<script src=\"somescript.js\"></script>"; 
.. 
+4

最初のオプションは+1です。 –

+0

私も最初の方が好きです。はるかにクリーンで再利用可能です。彼らは2番目のアプローチを使用したくない場合、2番目のアプローチはちょうど "試してみる"提案でした: – Juri

+0

私はOPの問題は実際に仕事のセキュリティ機能であり、最初の答えは慣習的なノンブロッキング!)ソリューション。 – annakata

1

.jsファイルを読み込む代わりにインラインJSを追加しようとしましたか?私はこれを過去にやったことがあり、それは私のためにうまくいった。最新のブラウザ/セキュリティのミスリーではまだ動作するかどうかは不明です。

HTH。

7

スクリプトタグは、おそらく独立して解釈されるように管理しているかを。試してみてください:

div.innerHTML = '<scr' + 'ipt src="somescript.js"></scr' + 'ipt>'; 
+0

これはコードでスクリプトタグを使用する際のよくある問題で、ここでの問題は非常に高い可能性があります – jcoder

+0

これは興味深いことです。あなたは精緻化できますか? – bitsprint

+0

+1これは私の問題のように聞こえる。 – RedFilter

11

この1つは私にもちょっとした不快感を与えました。あなたが 'defer'プロパティを含まない限り、IEはinnerHTMLを介してJSを直接挿入することはできません(下の2番目のリンクを参照)。このプロパティはIE固有のもので、他のマークアップがロードされるまでIEがJSの実行を延期することができるようになります。しかし、2つのスクリプトタグを(私のように)インクルードすると、スクリプトが非同期的に読み込まれるように見えるので、どちらが最初に実行されるかは保証されません。あなたのスクリプトが互いに依存している場合(私の場合と同じ)、これは問題になるはずです。

さらに注意が必要です。スクリプトを挿入すると同時にスクリプト以外のマークアップも挿入する必要があります。私はスクリプトタグを 'defer'プロパティの有無にかかわらず挿入することができませんでした。最後に、スクリプトタグは、他のすべての非スクリプトマークアップが挿入された後に配置する必要があります。それ以外の場合、スクリプトタグは挿入されたHTMLから取り除かれます。、コードを介したスクリプトを挿入する

http://msdn.microsoft.com/en-us/library/ms533719%28v=vs.85%29.aspx

例(はい:

MS innerHTMLプロパティリファレンス:

http://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx

MS延期プロパティリファレンス

は、ここではいくつかの参照です実際に動作します):

http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/insertScript_2.htm

私のテストコード:あなたは</script>

div.innerHTML = '<script src="somescript.js"><\/script>'; 

ためにエスケープ文字を使用する必要が

// I downloaded the MS example file above and tweaked their script a bit, 
// resulting in this. Using the proper approach to the defer property 
// (namely: defer="defer") did not provide me with consistent results, so 
// sticking with 'DEFER' may be necessary. 
// Note: Try moving the 'sHTML' variable to the end of the script string. 
function insertScript2() 
{ 
    var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me'><BR>"; 
    var sScript = sHTML + "<SCRIPT DEFER type='text/javascript'> function go2(){ alert('Hello from inserted script.') } </SCRIPT" + ">"; 
    ScriptDiv.innerHTML = sScript; 
} 
関連する問題