1

"sdk/tabs"私の Firefox アドオンでは使用できないようです。何が悪いのだろうか。私のbackground.jsは、この部分の後にコードの処理を停止します:

var tabs = require("sdk/tabs");

たとえば、このコードを実行すると、コンソールは「error1?」を出力します -- 上記のすべてを含みますが、そのスニペットの下からは何も出力しません。

console.log('error1?');
var tabs = require("sdk/tabs");
console.log('error2?');

// Listen for tab content loads.
tabs.on('ready', function(tab) {
  console.log('error3?');
  console.log('tab is loaded', tab.title, tab.url);
  console.log('error4?');
});

console.log('error5?');

manifest.jsonファイル"tabs"に許可として含めました。使用するために他に何かを含める必要がありますか?"sdk/tabs"

4

1 に答える 1

1

あなたはmanifest.jsonファイルに言及し、その中にtabs許可を持っています。manifest.jsonファイルは、 WebExtensionベースのアドオンでのみ使用されます。アドオン SDK拡張機能require("sdk/tabs")でのみ使用できるものを使用したい。

WebExtensionsと Firefoxアドオン SDKの間で API を混在させているようです。これらは、Firefoxの 4 つの異なるタイプの拡張機能のうちの 2 つです。アドオン SDK API ( High-LevelLow-Levelも) は、WebExtension からは利用できません。同様に、WebExtension JavaScript APIは、アドオン SDK ベースの拡張機能からは利用できません。

具体的には、WebExtension を開発しているようです。sdk/tabsAPIはアドオン SDK 用です。WebExtension ベースのアドオンでは確実に機能しません。一般に、require()WebExtension アドオンでは機能しないアドオン SDK を扱っていることはほぼ確実です。require("sdk/tabs")したがって、 WebExtension ベースのアドオンでは使用できません。

Firefox/Mozilla には 4 種類の拡張機能があります。

  1. アドオンSDK : これらのアドオンは、最初に を実行することによって生成されるpackage.jsonファイルによって記述されますjpm init。これらの拡張機能は、多くの場合、レベル APIまたは低レベルAPI をrequire()ロードして Firefox とやり取りするために使用されます。現在、これらのアドオンは、テスト用に読み込まれるか、配布用 (つまり、AMO/Mozilla へのアップロード)によって.xpiファイルに統合されるときに、ブートストラップされた拡張機能にラップされます。つまり、SDK ラッパーを使用したブートストラップ拡張機能です。Mozilla は、拡張機能が を使用しない限り、または XUL、XPCOM、または XBL に依存 しない限り、アドオン SDK ベースの拡張機能を引き続きサポートすることを約束しているようです。jpm runjpm xpi
    require("chrome")
    ブートストラップされた拡張機能で実行できることのほとんどは、アドオン SDK ベースの拡張機能で実行できます。ただし、そのような多くのことは、アドオン SDK を使用する利点のかなりの部分を失う SDK をバイパスします。
  2. WebExtensions : これらのアドオンは、manifest.jsonファイルによって記述されます。この API は、Google Chrome 拡張機能に使用されるものと似ています。Mozilla は、この API が Firefox 拡張機能の未来であると主張していますが、この API はまだ開発中です。今のところ、 Firefox Developer EditionまたはFirefox Nightlyを使用して WebExtension アドオンを開発およびテストすることをお勧めします。また、使用したい機能に必要な Firefox のバージョンを注意深く書き留めておく必要があります。この情報は、MDN ドキュメント ページの「ブラウザの互換性」セクションに含まれています。
    WebExtensions は、大幅に異なる API を使用します。意図的に、他のアドオン タイプによって提供されるインターフェイスを使用する機能はありません。
  3. Bootstrapped : これらの拡張機能は、アドオンをロード/アンロードするためにアプリケーションを再起動する必要のない最初のタイプの Mozilla 拡張機能であるため、一般に「再起動なし」とも呼ばれます。ただし、再起動なしは、それらがどのように機能するかの記述子です。アドオン SDK と WebExtension アドオンの両方とも、アドオンのロードまたはアンロード時にアプリケーションを再起動する必要がないため、このタイプのアドオンの名前として「再起動なし」を使用すると混乱します。そのため、このタイプのアドオンの名前として「再起動なし」を使用しなくなった傾向があります。
    これらのアドオンには、アドオンstartup()shutdown()install()uninstall(). これらのアドオンには、アドオンを説明するinstall.rdfが含まれています。
    通常、常にではありませんが、拡張機能内のファイルとディレクトリが Mozilla アプリケーション (Firefox など) とどのように関連しているかを説明するchrome.manifestファイルも含まれています。
    すべてではありませんが、overlay/XUL/Legacy 拡張機能で実行できることのほとんどは、ブートストラップ アドオンで実行できます。アドオン SDK で実行できることはすべて、ブートストラップされた拡張機能で実行できます (アドオン SDK 拡張機能は、いくつかの JavaScript ベースの API レイヤーを備えたブートストラップされたアドオンです)。Mozilla は、「XUL、XPCOM、および XBL に依存するアドオン」を廃止する予定であると述べています。すべてのブートストラップ アドオンがこれらのテクノロジに依存しているわけではありませんが、ブートストラップ アドオンはアドオン SDK および WebExtension アドオンよりも低いレベルで動作する傾向があります。したがって、彼らはこれらのテクノロジーを使用する可能性が高くなります。ブートストラップされたアドオンはすべて非推奨になる予定であると言う人もいますが、それが事実であることは明らかではありません。結局のところ、アドオン SDK 拡張機能は非推奨ではなく (XUL、XPCOM、または XBL を使用するrequire("chrome")か、XUL、XPCOM、または XBL に依存している場合を除きます)、すべてのアドオン SDK 拡張機能は、SDK ラッパーを使用するだけのブートストラップ拡張機能です。
  4. Overlay/XUL/Legacy : これらのアドオンには、アドオンについて説明するinstall.rdfと、アドオンのファイルがアプリケーションのファイルとどのように関連するか (オーバーレイなど) を説明するchrome.manifestファイルが含まれています。アプリケーションでアドオンがどのように機能するかは、chrome.manifestファイルに記述された関係に完全に依存します。これに対する唯一の例外は、拡張機能のアイコンや、 install.rdfファイルに示されている拡張機能のオプションを説明するファイルなどのいくつかのものです。これらの拡張機能は、非常に低いレベルでアプリケーション (Firefox など) と対話します。これにより、アプリケーションに変更が加えられたときに破損する可能性が高くなります。
    すべての Overlay/XUL/Legacy 拡張機能は非推奨になる予定です。
于 2016-07-18T05:05:00.857 に答える