"sdk/tabs"
似乎无法在我的Firefox插件中使用。我想知道出了什么问题。我的 background.js 在此部分之后停止处理任何代码:
var tabs = require("sdk/tabs");
E.g。如果我运行此代码,控制台将输出" 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?');
我已在{em> manifest.json 文件中包含"tabs"
作为权限。我是否需要包含其他任何内容才能使用"sdk/tabs"
?
答案 0 :(得分:1)
您提到manifest.json个文件,其中包含tabs
permission。 manifest.json 文件仅用于基于WebExtension的附加组件。您希望使用仅require("sdk/tabs")
扩展名中提供的Add-on SDK。
您似乎在WebExtensions和Firefox Add-on SDK之间混合了API。这是Firefox的四种不同类型extensions中的两种。 WebExtension中没有可用的附加SDK API(High-Level或Low-Level)。同样,基于Add-on SDK的扩展程序无法使用WebExtension JavaScript APIs。
具体来说,您似乎正在开发WebExtension。 sdk/tabs
API适用于附加SDK。它肯定会在基于WebExtension的插件中无法正常工作。通常,如果您看到require()
,您几乎肯定会处理在WebExtension插件中无法使用的附加SDK。因此,您将无法在基于WebExtension的插件中使用require("sdk/tabs")
。
Firefox / Mozilla有四种不同类型的扩展程序:
jpm init
生成的。这些扩展程序通常会使用require()
加载High-Level或Low-Level API以与Firefox进行交互。目前,这些加载项在被jpm run
加载进行测试或由jpm xpi
合并到 .xpi 文件中时被包装到自举扩展中以进行分发(即上传到AMO / Mozilla浏览器)。换句话说,它们是带有SDK包装器的自举扩展
只要扩展名不使用require("chrome")
,或者依赖于XUL,XPCOM或XBL,Mozilla似乎承诺继续支持基于附加SDK的扩展。startup()
,shutdown()
,{{1}调用的}和install()
。
这些加载项包含一个描述加载项的install.rdf
它们通常(但并非总是)包含chrome.manifest文件,该文件描述扩展中的文件和目录如何与Mozilla应用程序(例如Firefox)相关。
覆盖/ XUL / Legacy扩展中可以完成的大部分工作(但不是全部)都可以在自举的附加组件中完成。可以在附加SDK中完成的任何操作都可以在引导扩展中完成(附加SDK扩展是带有一些基于JavaScript的API层的引导附加组件)。
Mozilla已声明他们计划弃用"add-ons that depend on XUL, XPCOM, and XBL."虽然并非所有引导附加组件都依赖于这些技术,但引导附加组件的运行速度往往低于附加SDK和WebExtension添加 - 附件。因此,他们更有可能使用这些技术。虽然有些人表示所有自举附加组件都计划被弃用,但目前尚不清楚是否属实。毕竟,Add-on SDK扩展不会被弃用(除非他们使用uninstall()
,或者依赖于XUL,XPCOM或XBL),并且所有附加SDK扩展都是自举扩展,只需使用SDK包装器。