tl;dr:我们使用插件SDK创建了一个firefox插件。由于编译插件是在一个更大的构建系统中的一个步骤(我们也为chrome编译),我们的构建系统手动打包xpi,而不使用jpm。然而,我们使用了一个jpm打包插件的内容作为模板来编写我们自己的插件。这只适用于firefox>=38。是否有一种简单的方法使其适用于早期版本?
细节:
所以我们打包了一个包含以下bootstrap.js的xpi文件:
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { utils: Cu } = Components;
const rootURI = __SCRIPT_URI_SPEC__.replace("bootstrap.js", "");
const COMMONJS_URI = "resource://gre/modules/commonjs";
const { require } = Cu.import(COMMONJS_URI + "/toolkit/require.js", {});
const { Bootstrap } = require(COMMONJS_URI + "/sdk/addon/bootstrap.js");
const { startup, shutdown, install, uninstall } = new Bootstrap(rootURI);
此外,xpi包含一个包含实际代码的index.js。这个index.js然后为sdk/page-mod设置内容脚本。
所以在Bootstrap .js中,启动/关闭函数链接到一个Bootstrap对象,然后处理启用/禁用插件。
这在firefox40中工作得很好,但我在firefox38之前的版本中测试了它,它不起作用,因为它不能运行bootstrap.js脚本。
是否有一个简单的方法让它在早期的firefox版本中工作?不幸的是,很难找到这方面的文档。具体来说,我们不想破坏启用/禁用插件,也就是说,如果用户禁用了插件,那么page-mod也应该被禁用(就像Bootstrap类那样),当启用插件时,它应该再次启用。
将require
暴露为JSM是最近才引入的,因此您只需为您的方法使用新功能。
对于旧版本,你将不得不创建一个自定义Loader实例,然后可以用来要求的东西。