2011-02-28 7 views
3

Webページのjavascriptオブジェクトとして公開されるXPCOMコンポーネントを作成したいと思います。 Google Gearsのようなものが私が探しているものです。つまり、Google Gears Firefox拡張機能をインストールした後、javascriptオブジェクト 'google.gears'は、それを使用するすべてのWebページで使用できます。私は、XPCOM開発について多くのmozillaドキュメントを見出しましたが、コンポーネントをWebページで実行されているjavascriptに公開することは何もありませんでした。これはXPCOMで可能ですか?拡張機能の代わりにFirefoxプラグインを記述する必要はありますか?WebページのjavascriptにXPCOMコンポーネントを公開する

答えて

7

Firefox 4の新しいAPIであるnsiDOMGlobalPropertyInitializerを使って、すべてのウィンドウに遅延接続するJSオブジェクトを作成できます。 Firefox 4の新しいWebコンソールが作成される方法です。 CIに

https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js SO基本的には、QI:ここ

QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]), 

は拡張子で完全な実装の一例です:

はあなたのコンポーネントで、次のQIプロパティを持っている必要があります.nsIDGlobalPropertyInitializerの場合、マニフェストに次のような行があることを確認してください。

category JavaScript-global-property crypt @droplettr.com/domcrypt;1 

参照:https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest

+0

を持つことになりますマニフェスト行は常に ''カテゴリーJavaScriptのグローバル・プロパティ{プロパティ名} {コンポーネント契約ID}のように見に行くされていません – sdwilsh

+0

申し訳ありませんが、JSのグローバルプロパティについては何も新しいことはありません。 nsIDOMGlobalPropertyInitializerインターフェイスは新しくなっていますが、質問者の質問には必要ありません。あなたのJSグローバルプロパティがそれを実装している場合、それがどのウィンドウオブジェクトにアタッチされているかを知ることができるので、かなり涼しいです。これはFirefox 4以前では不可能でした。 –

1

This articleは有望と思われる:

(Webページなど)一般的に言って、信頼できないコンテンツ がそれらを作成 含むほとんどのXPCOMコンポーネント、と何も を行うことはできません。もちろん、このポリシーには の例外があります。たとえばDOM オブジェクトは、公に使用するために インターフェイスが明確に定義された XPCOMコンポーネントです。ただし、Web ページでコンポーネントを使用するには、 メソッドまたは プロパティを呼び出すことが必要です。コンポーネントには、 が許可されていないものと明示的にMozillaに通知する必要があります( )。 nsISecurityCheckedComponentインターフェイス は、それがどのように行われるかを定義します。

出典http://weblogs.mozillazine.org/weirdal/archives/017211.html

0

それはなんとかですが、あなたは、プロキシにXPCOMコンポーネントへの呼び出しを持つことになります。それはおそらくかなり危険なことにも留意してください。

クロムオブジェクトをコンテンツコードに公開する方法については、私の回答hereを参照してください。

1

旧式の3.x方法は、コンポーネントを「JavaScriptグローバルプロパティ」カテゴリに登録することです。 (これは4.xでも動作しますが、カテゴリ名にはスペースが含まれなくなったので、代わりに "JavaScript-global-property"カテゴリを使用する必要があります)。オブジェクトにはnsIClassInfoインターフェイスを実装する必要があります。コンテンツに公開したいあなたがあなたのオブジェクトにアクセスしているコンテンツスクリプトを知る方法がないので、あまり役に立ちません。

0

あなたがウェブの拡張機能でこれを行うことができ、私が読んでいると、もはやサポート

関連する問題