Firefox の拡張機能を開発する際に、グローバルな名前空間の汚染について調べていましたが、拡張機能ではできるだけ回避したいと考えています。いくつかの解決策がありますが、一般的に、解決策は拡張機能のグローバル変数を 1 つだけ宣言し、その中にすべてを入れることに集中しているようです。したがって、グローバル名前空間に変数を 1 つ追加するだけで済みますが、これはそれほど悪くはありません。
余談ですが、グローバル名前空間に余分な変数を入れないようにする解決策を提案してもらいました。すべてを関数にラップします。ここでの問題は、XUL オーバーレイで参照するものが何もないことです。オーバーレイで要素を宣言する必要があります。次に、JS で大量の s を追加して、XULaddEventListener
の のようなものを置き換えます。oncommand="..."
私はこれをしたくありません。私は XUL 自体にイベントを含めることを絶対に望んでいます。oncommand="..."
したがって、参照する XUL 属性用に少なくとも 1 つのグローバル変数が必要です。
したがって、コンセンサスは、拡張機能に 1 つ (そして 1 つだけ) の変数を持ち、すべてのコードをその中に入れることです。ここに問題があります。一般に、他の変数と衝突する可能性がほとんどないように、その変数には長くてユニークな名前を付けることをお勧めします。したがって、拡張機能の ID が の場合myextension@mycompany.com
、変数myextensionAtMycompanyDotCom
に 、またはという名前を付けることができますcom.mycompany.myextension
。これは、グローバル名前空間での衝突を回避するのに適していますが、問題が 1 つあります。その変数名は長くて扱いにくいです。私の XUL には、次のようなイベント ハンドラへの参照が散らばっています。oncommand="myextensionAtMycompanyDotCom.doSomeEvent"
. オーバーレイはブラウザー ウィンドウの DOM に追加されるだけなので、XUL オーバーレイでグローバル名前空間を参照する必要を回避する方法はありません。独自の名前空間を持たないため、拡張機能の変数スコープを独自のオーバーレイだけに制限することはできません。したがって、私が見ているように、4つの解決策があります。
1. XUL で長い変数名を使用するだけ
これにより、次のようなやや扱いにくく冗長な XUL コードが生成されます。
<statusbarpanel id="myStatusBar" onmousedown="myextensionAtMycompanyDotCom.onMyStatusBarClick();">
2. 短い変数名にランダム性の要素を追加する
拡張機能の短い変数名を思いつきます。myExt
たとえば、myExtAX8T9
. 次に、XUL には次のものがあります。
<statusbarpanel id="myStatusBar" onmousedown="myExtAX8T9.onMyStatusBarClick();">
明らかに、ランダムな文字が奇妙に見え、ある種の一時変数のように見えるため、これはかなり見苦しく、混乱を招くコードになります。
3. グローバル変数を宣言しない
すべてを関数にまとめることができます。addEventListener
もちろん、これは XUL で参照するものが何もないことを意味するため、すべてのイベントを JavaScript コードで使用する XUL 要素に関連付ける必要があります。上記のように、大量の JS コードを検索してどのイベントがどの XUL 要素に関連付けられているかを見つけるよりも、XUL コードでイベントを参照する方がクリーンだと思うので、私はこの解決策が好きではありません。
4. XUL では短い変数名を使用する
拡張機能の variable を呼び出すだけで、次のmyExt
ような素敵な XUL コードを取得できます。
<statusbarpanel id="myStatusBar" onmousedown="myExt.onMyStatusBarClick();">
もちろん、この短い名前は、グローバル名前空間内の何かと競合する可能性がはるかに高いため、理想的ではありません。
それで、私は何かを逃しましたか?上記で提案した 4 つのソリューションに代わるものはありますか? そうでない場合、4 つのうちどれが最も優れているでしょうか (#3 は基本的に私には受け入れられないことを考えると)、その理由は何ですか?