Google Closure を使用して他の JavaScript クラスを要求する機能が特に気に入っていますが、goog.require を使用して他の JavaScript クラスを遅延ロードできるかどうか疑問に思っています。ページがロードされた後に goog.require を使用しようとすると、更新されたり空白になったりするようです:(オンデマンドでスクリプトを取得し、コールバックで設定する方法は何でも、ロードが完了したらJavaScriptを実行できます?
2 に答える
クロージャーライブラリModuleManager:
https://github.com/google/closure-library/blob/master/closure/goog/module/modulemanager.js
goog.require
スクリプトのロードに使用するようには設計されていません。ただし、オンデマンドでのスクリプトファイルの遅延読み込みには特別なことは何もありません。ノードを動的に作成してページに追加するだけです。
function require(src)
{
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.body.appendChild(script);
}
上記の関数は、src
パラメータで指定されたURLからスクリプトをロードします。
コールバックは別の話です。スクリプトのロード後にイベントが発生することはありません。スクリプトがロードされたときに通知を受け取りたい場合は、スクリプト自体からロードされたスクリプトを通知する必要があります。たとえば、ロードするjavascriptファイルの最後のステートメントとして、ページで事前定義された関数を呼び出すことができます。この関数が呼び出されると、スクリプトの読み込みが完了したことがわかります。ただし、これを行うには、ロードされたスクリプトファイルを変更できる必要があります。
スクリプトがロードされたことを通知するための同様のアプローチがJSONPで使用されます。JSONPデータは、上記と同じアプローチを使用して取得されます。動的に作成されたスクリプトノードをページに追加します。ただし、デフォルトでは、サーバーからデータを返しても状態は変化しません。何かが起こったことを示すために関数呼び出しが必要です(たとえば、データが到着しました)。JSONPでは、JSONPリクエストのURLで関数の名前を指定します。次に、サーバーは、指定した関数が呼び出されたJavaScriptの一部を返し、引数でJSONデータを渡します。
これはすべて、スクリプトがロードされた後にページ上の関数を呼び出すことができる必要があることを示唆しています。