2

JSファイルから別のJSファイルを読み込もうとしています。

私のJavaScriptファイルrun.jsから、次のものがあります。

document.write("<script type='text/javascript' src='my_script.js'></script>");
alert(nImages);

my_script.jsの側には、次のものがあります。

<SCRIPT language="JavaScript" type="text/javascript">
<!--
nImages = 6;
//-->
</SCRIPT>

しかし、 my_script.jsファイルnImagesからアラートを出すことができないようです。

4

3 に答える 3

5

あなたはこれを行うことができます:

var script = document.createElement('script');
script.src = 'my_script.js';
script.type = 'text/javascript';

script.onload = function () {
    alert(nImages);
};

document.getElementsByTagName('head')[0].appendChild(script);
于 2012-06-06T02:20:01.810 に答える
3

スクリプト ファイル内で HTML を使用しないでください。スクリプト ファイル my_script.js には、これだけが含まれている必要があります。

nImages = 6;

追記: language="JavaScript"orは<!--必要ありません//-->。これらは、最新のブラウザー (IE6 でさえも) には必要のない古い規則です。document.write()また、パフォーマンスに影響があるため、JS での使用も避けたいと思います。ページに他の JS ファイルをロードするためのより良い方法を提供するRequireJSなどのライブラリを参照することをお勧めします。

また、Githubには、Steve Souders に触発された、ストレート JS を介して別のファイルをロードするコード スニペットがあります。

var theOtherScript = 'http://example.com/js/script.js';

var el = document.createElement('script');
el.async = false;
el.src = theOtherScript;
el.type = 'text/javascript';

(document.getElementsByTagName('HEAD')[0]||document.body).appendChild(el);

これにより、他のスクリプトが要素 (存在する場合) またはページの に追加されます。

于 2012-06-06T00:35:49.043 に答える
0

Javascript ファイルに HTML を含めないでください。それらは完全に Javascript コードで構成され、次のso my_script.jsもののみを含む必要があります。

nImages = 6;

新しいスクリプト タグをドキュメントに書き込んでも、すぐには実行されないため、これはまだ機能しません。開始run.js前に実行が終了することが保証されているため、警告すると未定義になり、後で 6 になります。これが機能することがわかります:my_script.jsnImages

document.write("<script type='text/javascript' src='my_script.js'></script>");

function call_on_load(){
    alert(nImages);
}

の内容が次の場合my_script.js:

nImages = 6;
call_on_load();

編集

あなたは編集できないとコメントで言ったので、my_script.jsこれを行うことができますが、それはそれほど良い解決策ではありません:

// Force nImages to be undefined
var undefined;
window.nImages = undefined;

document.write("<script type='text/javascript' src='my_script.js'></script>");

(function is_loaded(cb){
    if(typeof window.nImages == 'undefined')
        setTimeout(function(){ is_loaded(cb); }, 100);
    else
        cb();
})(function(){
    // This is executed after the script has loaded
    alert(nImages);
});

ただし、これは適切な解決策ではありません。スクリプトのロード中にエラーが発生した場合、無期限にポーリングが続行されるためです。

編集

含めたいファイルをコメントに投稿しました。そのファイル<SCRIPTの上部には があります。このファイルは役に立たず、クライアント側では何もできません。ファイルをテキストとしてロードするには、サーバー側のスクリプトを作成する必要があります。その場合、必要な値を解析するだけです。

于 2012-06-06T00:38:17.477 に答える