11

私は次のことをしようとしています (私はプロトタイプ ライブラリを使用しています):

var div = document.createElement('div');
div.innerHTML = '<script src="somescript.js"></script>';
$('banner').insert(div);

IE では、2 行目にプロパティを設定した後、div.innerHTML プロパティは常に "" と等しくなります。

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

どんな助けでも本当にありがたいです、これは私に白髪を与えています!

4

5 に答える 5

12

これは私にも少し窮地に立たされました。'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;
}
于 2011-02-10T23:59:55.703 に答える
7

あなたのスクリプトタグはおそらく独立して解釈されています。試す:

div.innerHTML = '<scr' + 'ipt src="somescript.js"></scr' + 'ipt>';
于 2009-07-01T11:13:46.153 に答える
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>";
..
于 2009-07-01T11:13:32.880 に答える
6

エスケープ文字を使用する必要があります</script>

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

javascript '<\/script>' で / をエスケープする理由がわかりますか?

于 2011-03-29T17:24:47.520 に答える
1

.js ファイルをロードする代わりにインライン JS を追加しようとしましたか? 私は過去にこれを行いましたが、私にとってはうまくいきました。それが最新のブラウザ/セキュリティミスで引き続き機能するかどうかはわかりません.

HTH。

于 2009-07-01T11:07:44.823 に答える