|
|||||
|
カテゴリ: 別のjsファイルをロードするJavaScriptで他のjsファイルを読み込むにはどうすれば良いだろうか。jQueryの$.getScriptメソッドを使えば、簡単に他のjsファイルを読み込むことができる。 注意しなければならないのは、$.getScriptメソッドによるjsファイルの取得は非同期で行われるため、必ずしもそのメソッドから戻った時に対象のjsファイルは有効ではないということだ。通常はDeferredオブジェクト(この場合$.getScriptから返されるjqXHR)のdoneコールバック内で、対象jsファイルに含まれる変数、または関数等を使うことになるだろう。
// 非同期でスクリプトをロード
$.getScript('./varandfunc.js')
.done(function() {
console.log('x = ' + x + ' y = ' + square(3));
});
上記のコードでロードするvarandfunc.jsは以下のような単純なものだ。
var x = 100;
function square(n) {
return n * n;
}
尚、$.getScriptメソッドでロードするjsファイルはキャッシュされない。jsファイルをキャッシュしたい場合、$.ajaxSetupメソッドでajax周りのグローバル設定を変更する。
$.ajaxSetup({cache: true});
jQuery 1.8以降推奨されていないが、$.ajaxメソッドにasync: falseを渡して、同期的にjsファイルを読み込むことも可能だ。これだと$.ajaxメソッドから戻った時には、既にjsファイルは読み込まれている。また、$.ajaxメソッドならばキャッシュの指定も同時に行うことができる。
// 同期でスクリプトをロード
$.ajax({url: './varandfunc.js', dataType: 'script', async: false, cache: true});
console.log('x = ' + x + ' y = ' + square(3));
実際、Chromeからも以下のような文句を言われてしまう。「メインスレッドでの同期XMLHttpRequestは、ユーザエクスペリエンスに悪影響を及ぼすから推奨されないよ。」と言っているようだ。 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/. (2015/02/04)
Copyright© 2004-2018 モバイル開発系(K) All rights reserved.
[Home]
|
|||||