これは私にも少し窮地に立たされました。'defer'プロパティを含めない限り、IEではinnerHTMLを介してJSを直接挿入することはできません(以下の2番目のリンクを参照)。このプロパティはIEに固有であり、他のマークアップがロードされるまでIEがJSの実行を延期できるようにします。ただし、警告ですが...(私が行ったように)2つのスクリプトタグを含めると、スクリプトが非同期にロードされるように見えるため、どちらが最初に実行されるかは保証されません。これは、スクリプトが相互に依存している場合にのみ問題になるはずです(私のように)。
追加の警告もあります...スクリプトを挿入すると同時に非スクリプトマークアップを挿入する必要があります。'defer'プロパティの有無にかかわらず、スクリプトタグを単独で挿入できませんでした。最後に、スクリプトタグは、他のすべての非スクリプトマークアップが挿入された後に配置する必要があります。それ以外の場合、スクリプトタグは挿入されたHTMLから削除されます。
ここにいくつかの参照があります:
MS innerHTMLリファレンス:
http://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx
MS Deferプロパティリファレンス:
http://msdn.microsoft.com/en-us/library/ms533719%28v=vs.85%29.aspx
コードによるスクリプト挿入の例(はい、実際には機能します):
http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/insertScript_2.htm
私のテストコード:
// 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;
}