0

動的にロードする 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 に準拠していないと機能しません。

4

0 に答える 0