Firefox は、C++ でアドオン クラスを作成するための XPCOM API インターフェイスを提供し、サードパーティの Web アプリケーションがそれらにアクセスできるようにします。私は疑問に思っています - これらの利点を達成する他の方法はありますか (つまり、C++ でアドオンを作成し、JavaScript インターフェイスを提供して、JavaScript アプリがこのインターフェイスを使用し、最終的に C++ クラス機能を使用できるようにします)?
1925 次
1 に答える
1
はい、XPCOM コンポーネントを C++ (または Javascript) で記述して Web サイトに公開することは可能です。JavaScript-global-property
、JavaScript-global-constructor
などのカテゴリに登録します。このようなことは、一般的に、文書化されていたとしても、十分に文書化されていません。詳しく知りたい場合は、コードを読んでください (例: mxr )。
しかし、多くの理由から、そうすることは強くお勧めできません:
- そのようなものが実際に安全であり、信頼できるものであることを確認することは非常に困難です.
- どの Web サイトが実際に新しい API を使用するかを制御するのは困難です。
JavaScript-global-property
友達はすべてのウェブサイトで利用できます! - あなたのアドオンはグローバルな JavaScript 名前空間に新しい名前を導入し、Web サイトのコードと競合する可能性があります。(このため、多くの新しい WebAPI はグローバル名前空間に直接導入されず、ナビゲーターのプロパティになります)。
- これらの理由により、addons.mozilla.org サイトは、ルールの例外としてこのメカニズムを使用するアドオンのみを受け入れ、作成者がその使用が必要であり、実際の代替手段がないことを示した場合にのみ受け入れます。
MDNには、Web ページから拡張機能への通信およびその逆に関する記事がいくつかあります。
また、バイナリの XPCOM コンポーネントを拡張機能に同梱することはお勧めしません:
- Firefox 4 以降、バイナリ コンポーネントにはバージョン タグが付けられているため、Gecko の各バージョンに対して (6 週間ごとに) バイナリを再コンパイルする必要があります。
- (ポイント) リリース間のバイナリ API/ABI は、期待するほど安定していません。実際、API/ABI はゲームの終盤で不注意に頻繁に破損し、バグ 828296など、多くのユーザーに多くの不必要なクラッシュを引き起こしました。
- プラットフォームの開発者は、拡張機能のバイナリ コンポーネントは面倒だと公式に述べています。
代わりに、可能な場合は Javascript を使用するか、C-API/ABI を使用して通常のバイナリ ライブラリ (.so、.dll、.dylib) を作成し、js-ctypesを使用するようにしてください。XPCOM コンポーネントを JavaScript で実装すると、js-ctypes を使用してライブラリを呼び出すことができます。私の知る限り、ほとんどのアドオンは今では js-ctypes に切り替えられています。
于 2013-08-02T17:37:36.333 に答える