この問題を解決するためにライブラリを作成しました。もちろん、コードが問題を認識して最初にライブラリを使用する必要があるため、それが役立つかどうかはわかりません。ライブラリを使用するようにコードを変更できる場合にのみ役立ちます。
問題のライブラリはPackages JSと呼ばれ、クリエイティブ コモンズ ライセンスに基づくオープン ソースであるため、無料でダウンロードして使用できます。
基本的に、関数内にコードをパッケージ化することで機能します。これらの関数から、他のパッケージに公開したいオブジェクトをエクスポートします。コンシューマー パッケージでは、これらのオブジェクトをローカルの名前空間にインポートします。あいまいさを解決できるため、他の誰かが同じ名前を複数回使用していても、実際にあなた自身が同じ名前を使用していても問題ありません。
以下に例を示します。
(ファイル例/greeting.js)
Package("example.greeting", function() {
// Create a function hello...
function hello() {
return "Hello world!";
};
// ...then export it for use by other packages
Export(hello);
// You need to supply a name for anonymous functions...
Export("goodbye", function() {
return "Goodbye cruel world!";
});
});
(ファイル example/ambiguity.js)
Package("example.ambiguity", function() {
// functions hello and goodbye are also in example.greeting, making it ambiguous which
// one is intended when using the unqualified name.
function hello() {
return "Hello ambiguity!";
};
function goodbye() {
return "Goodbye ambiguity!";
};
// export for use by other packages
Export(hello);
Export(goodbye);
});
(ファイル example/ambiguitytest.js)
Package("example.ambiguitytest", ["example.ambiguity", "example.greeting"], function(hello, log) {
// Which hello did we get? The one from example.ambiguity or from example.greeting?
log().info(hello());
// We will get the first one found, so the one from example.ambiguity in this case.
// Use fully qualified names to resolve any ambiguities.
var goodbye1 = Import("example.greeting.goodbye");
var goodbye2 = Import("example.ambiguity.goodbye");
log().info(goodbye1());
log().info(goodbye2());
});
example/ambiguitytest.js は 2 つのライブラリを使用しており、どちらも関数 goodbye をエクスポートしますが、正しいライブラリを明示的にインポートし、それらをローカル エイリアスに割り当ててあいまいさを解消することができます。
このように jQuery を使用することは、Package への呼び出しでそのコードをラップし、現在グローバル スコープに公開されているオブジェクトをエクスポートすることにより、jQuery を「パッケージ化」することを意味します。それはライブラリを少し変更することを意味しますが、これはあなたが望むものではないかもしれませんが、残念ながらiframeに頼らずに見ることができる方法はありません.
ダウンロードに人気のあるライブラリの「パッケージ」バージョンを含めることを計画しており、jQuery は間違いなくリストに含まれていますが、現時点では、jQuery のセレクター エンジンである Sizzle のパッケージ バージョンしかありません。