2

特定のHTTPリクエストをインターセプトし、リクエストが実際のサーバーに送信されることなく静的コンテンツを返すFirefox拡張機能を作成しようとしています(AdBlockと同様)。

チュートリアルを調べて、基本的なファイルレイアウトを作成しました。また、 nsITraceableChannel APIを使用し、オブザーバーを追加して必要な処理を実行する必要があることもわかりました。そのためのサンプルコードがあります。

問題は、このコードを実際にどこに置くかということです。そして、私の拡張機能が実際にロードされて実行されるのはいつですか?バックグラウンドで常に非同期で実行されていますか、それともページビューごとに読み込まれますか?

ドキュメントはこれについてあまり明確ではないようです。この拡張機能はGUIを必要としないので、レイアウトXULファイルは必要ありません(または必要ですか?)。XPCOM(私はそれを正しくやったとは思わない)コンポーネントを書いてみて、それを登録しましchrome.manifestたが、実行されていないようです。

Firefoxの拡張機能がどのように機能するのか、リクエストを監視するために実際のJavaScriptコードをどこに置くべきかを誰かが正確に説明できますか?または、拡張子が間違っていることを完全に理解しましたか?アドオン、拡張機能、プラグインに違いはありますか?

4

1 に答える 1

9

アドオン、拡張機能、プラグインの違いについては、この回答をご覧ください。しかし、一般的に、あなたは正しい考えを持っているようです。

問題は、現在3つの非常に異なるタイプの拡張機能があることです。

  1. 従来の拡張機能(再起動なしではありません):これらは通常、ブラウザーウィンドウをオーバーレイし、このオーバーレイからコードを実行します。ウィンドウごとに1つのオーバーレイがあるため、ブラウザウィンドウと同じ数のコードインスタンスが存在します。ただし、従来の拡張機能はXPCOMコンポーネントを登録することもできます(Gecko chrome.manifest2.0以降)。このコンポーネントは最初の使用時にロードされ、ブラウジングセッション全体にわたって保持されます。おそらく、ブラウザの起動時にコンポーネントをロードする必要があります。そのためには、コンポーネントをprofile-after-changeカテゴリに登録して実装する必要がありますnsIObserver
  2. ブートストラップ拡張機能とも呼ばれる再起動なしの拡張機能:これらはオーバーレイを登録できないため、ブラウザーUIの操作がやや複雑になります。代わりにbootstrap.js、拡張機能がアクティブ化されたときに読み込まれるスクリプトがあります。このコンテキストは、ブラウザがシャットダウンされるか、拡張機能が無効になるまでバックグラウンドで保持されます。XPCOMコンポーネントをリスタートレス拡張機能に含めることもできますが、手動で登録する必要があります(nsIComponentRegistrar.registerFactory()およびnsICategoryManager.addCategoryEntry()を使用)。また、拡張機能がシャットダウンされた場合は、コンポーネントの登録を解除する必要があります。オブザーバーnsIObserverServiceを追加するだけの場合は、これは不要です。nsIObserverXPCOMコンポーネントとして登録されているオブジェクトだけでなく、実装しているすべてのオブジェクトを取得します。大きな欠点は次のとおりです。ほとんどのMDNの例は、従来の拡張機能に関するものであり、再起動なしの拡張機能でどのように処理するかを説明していません。
  3. アドオンSDKに基づく拡張機能:これらは、再起動なしの拡張機能を生成するフレームワークに基づいています。アドオンSDKには独自のAPIがあり、Firefox拡張機能で通常行うものとは大きく異なりますが、シンプルであり、ほとんどの場合、拡張機能のシャットダウンを処理するため、手動で行う必要はありません。ここでの拡張機能はいくつかのモジュールで構成されており、main.js自動的にロードされ、必要に応じて追加のモジュールをロードできます。ロードされると、拡張機能がアクティブである限り、各モジュールはそのままになります。それらはサンドボックスで実行されますが、サンドボックスを離れてXPCOMに直接アクセスすることもできます。ただし、代わりに内部observer-serviceモジュールを使用する可能性があります。
于 2012-06-14T11:15:33.480 に答える