3

Electrolysis (e10s) をサポートするために、Firefox 拡張機能の 1 つを移植しようとしています。私の拡張機能は、いくつかのページ データを取得し、ユーザーがクリックできるコンテキスト メニュー項目を介してクリップボードに配置します。メッセージ マネージャーのドキュメントに基づいて、3 種類のメッセージ マネージャーを使用できます。

  1. グローバル
  2. ブラウザ

私のアドオンはコンテキスト固有であるため、最後のアドオンが使用したいもののようです。問題は、フレーム スクリプトをロードするタイミングが完全にわからないことです。コンテキスト メニュー項目のアクション処理コードの簡易バージョンは次のようになります。

onContext: function() {
  let browserMM = gBrowser.selectedBrowser.messageManager;
  browserMM.loadFrameScript("chrome://myaddon/content/frame-script.js", true);
  browserMM.sendAsyncMessage("myaddon@myaddon.com:get-page-info", json);
}

ここでフレーム スクリプトをロードすることは、(a) フレーム スクリプトがすべてのページで使用されるとは限らず、(b) フレーム スクリプトは<browser>. 2 番目の理論は正しくないようです。を呼び出すたびにloadFrameScript、新しいコピーが読み込まれます。負荷保護ロジック (つまり、フレーム スクリプト関数がまだ存在しない場合にのみ作成する) でさえ、問題を解決していないようです。

したがって、私の問題は、コンテキスト メニュー項目にアクセスするたびに、フレーム スクリプトの新しいコピーが読み込まれることです。また、フレーム スクリプトがメッセージ リスナーを追加するため、コンテキスト メニュー項目の後続の呼び出しでメッセージが重複して表示されます。

ブラウザ フレーム スクリプトはいつロードする必要がありますか? アドオンの初期化時に一度ロードすると、最初にしかロードされないため、うまく機能しないようです<browser>(後続の によって要求されたときにこのコードを実行したい<browser>)。しかし、オンデマンドでロードすると、重複するように見えます。

ここで見逃している他の戦略はありますか?

4

1 に答える 1