動的にロードする JavaScript ライブラリのさまざまなバージョンがいくつかあります。
たとえば、複数のバージョンの foo ライブラリをロードしたいとします。私は持っている:
foo-0.1.js
foo-0.2.js
Foo は AMD 準拠のライブラリではなく、非競合モードもありません。これは、私が制御できない第 3 部のライブラリです。次の行に沿って何かをするだけです:
window.Foo = fooFunction;
これらのライブラリ バージョンは、プラグイン シナリオで非同期かつ動的に読み込まれます。読み込みは実際には requirejs によって行われますが、重要ではありません。関数の内容がダウンロードされて実行されるとしましょう。
foo-0.1 を必要とする MODULE_1 プラグインと、foo-0.2 を必要とする MODULE_2 プラグインがあるとします。
ユーザーが要求すると (たとえば、名前をクリックして)、MODULE_1 が初期化され、foo-0.1 が読み込まれます。ユーザー インターフェイス (キャンバス) を設定し、ユーザー入力を待ちます。window.foo オブジェクトがバージョン 0.1 を指すようになりました。
次に、ユーザー要求 MODULE_2 が初期化されて foo-0.2 のロードを開始し、キャンバスをセットアップしてユーザー入力を待ちます。これで、window.foo が上書きされ、foo-0.2 を指します。
最後に、ユーザーが MODULE_1 のユーザー インターフェイスをクリックすると、MODULE_1 は状況に反応して何かをしようとします。しかし、window.foo は MODULE_1 と互換性のない foo-0.2 オブジェクトを指しており、惨めにクラッシュします。
私が望むのは、オブジェクトに foo-0.1 を格納し、別のオブジェクトに foo-0.2 を格納することです。foo-0.1 と foo-0.2 をロードするときにウィンドウ オブジェクトを変更する方法はありますか?
PS。私はこれがうまくいくとは思わない:
/* MODULE_1 */
// load foo-0.1
// when ready:
var foo-0.1 = window.foo
/* MODULE_1 */
// load foo-0.2
// when ready:
var foo-0.2 = window.foo
2つのうちの1つのreadyイベントがもう1つのreadyイベントの前にロードされることを確認できないためです(私は正しいですか?)
PPS: RequireJs のマルチバージョン サポートについてはよく知っていますが、ロードされたライブラリが AMD に準拠していないと機能しません。