2

そのため、Firefox 拡張機能では、拡張機能のオブジェクトを com.contoso.myExtension などのサブオブジェクトに配置することをお勧めします。そうすれば、グローバル名前空間にオブジェクトを配置せず、拡張機能は通常、お互いの髪の毛から離れます。(少なくとも一般的な browser.xul ウィンドウでは)

しかし、 Javascript コード モジュール (JSM)について私が理解していることは、モジュール自体が別の名前空間で動作している間、それがエクスポートするシンボルは、それをインポートするコードのグローバルな名前空間で終わるということです。さらに、エクステンションが「ナイス」であり、サブオブジェクトのみを構築しようとすることは不可能です。これらのエクスポートされたシンボルは、すでに存在するグローバル変数を攻撃するだけです。また、com.contoso.myExtension のようなシンボルをエクスポートすることはできません。これは単なるグローバル変数です。

では、JSM を使用するときに適切にプレイするためのプロトコルは何ですか? 非常に長い変数名を作成し、それらが衝突しないことを願っていますか?

4

1 に答える 1

3

まず第一に、私はこれをどう処理するかについての真の標準を見たことがありません。しかし、単なる長い変数名よりもはるかに優れていることは間違いありません...

別の名前空間に存在する Javascript コード モジュール(いわば) については正しいですが、それらをインポートするときに、それらをグローバル名前空間にインポートする必要はありません。Components.utils.importのドキュメントを見ると、特定のスコープにインポートできることがわかります。つまり、グローバル名前空間を汚染する必要はまったくありません

myExtensionモジュールを名前空間に集めることができます。

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

そして、これを自己実行関数内にラップしても、変数がグローバル名前空間にリークすることはありませんmyExtension

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
于 2011-04-30T21:36:28.017 に答える