1

Internet Explorerで次のコードを機能させるのに問題があります。サーバーからAjax経由で返送されたコードを実行したくないようですが、何もしません。

var ajax = new ActiveXObject('Microsoft.XMLHTTP');
ajax.open('GET','http://fromsitewebsite.com/javascript.js',true);
ajax.setRequestHeader('Connection','close');
ajax.onreadystatechange = function()
 {
   if ( ajax.readyState == 4 )
   {
    document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</script>';
   }
 };

ajax.send('');

私はまだ運がないのにこれをやってみました。

  document.body.innerHTML += '<script type="text/javascript">('+ajax.responseText+')()</script>')

乾杯

4

6 に答える 6

2

IEにスクリプトタグのコンテンツを適切に処理させるには、 .text値を設定する必要があります。

var scrElem = document.createElement('script');
scrElem.type = 'text/javascript';
scrElem.text = ajax.responseText;
document.body.appendChild(scrElem);
于 2009-10-16T12:35:28.300 に答える
1

試してみませんか:

var scriptElmnt  = document.createElement('SCRIPT');
scriptElmnt.type = 'text/javascript';
scriptElmnt.src  = '/javascript.js';
document.body.appendChild(scriptElmnt);

私が正しく覚えていれば、これは期待どおりに機能します

于 2009-10-16T12:12:41.800 に答える
0

eval返されたコードを試してください。

于 2009-10-16T12:10:37.730 に答える
0

スクリプトノードを作成してから、「innerHTML」ではなく「innerText」属性を使用してそのコンテンツを設定する必要がある場合があります。それは一種の奇妙なことです。スクリプト要素を追加し、その「src」属性をAJAX呼び出しで使用しているURLに設定するだけです。

「何もしない」と言ったら、スクリプトエラーをチェックしましたか?

于 2009-10-16T12:11:07.767 に答える
0

IEの場合、execScriptメソッドを使用する必要があります

if ( ajax.readyState == 4 )  
{  
    if (window.execScript)  
        window.execScript(ajax.responseText);  
    else  
        document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</  script>';  
}

上記で推奨されているevalには、IEに固有の機能があります。

于 2009-10-16T12:14:56.210 に答える
0

いくつかのこと。

まず第一に、eval()は悪です。重いJavaScript駆動のアプリケーションで使用すると、速度が大幅に低下します。

また、なぜjavascriptコードをロードするのですか?他のアプローチを考えることをお勧めします。小さなスクリプトの場合は、ロードするだけで、ユーザーはそれをキャッシュし、ロード時間は快適になります。ページに追加するサーバー値の場合は、AJAXを使用し、代わりにJSONをロードします。javascriptファイルが大きい場合は、それを縮小して、gzipを使用してサーバーから配信してみてください。上記以外の場合、IEはdefer = "defer"というスクリプトの属性をサポートし、新しく追加されたコードをレンダリングして実行します。ただし、IEでのみサポートされているため、お勧めしません。

..fredrik

于 2009-10-16T12:42:00.147 に答える