3

tl;dr:我们使用 Addon SDK 创建了一个 firefox 插件。由于编译插件是大型构建系统中的一步(我们也为 chrome 编译),我们的构建系统手动打包 xpi 并且不使用 jpm。但是,我们使用 jpm 打包插件的内容作为模板来编写我们自己的插件。这仅适用于 firefox >=38。有没有一种简单的方法让它适用于早期版本?

细节:

所以我们打包一个 xpi 文件,其中包含以下 bootstrap.js:

/* 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 对象,该对象然后处理插件的启用/禁用。

这在 Firefox 40 中运行良好,但我用 38 之前的版本对其进行了测试,但它不起作用,因为它无法运行 bootstrap.js 脚本。

有没有一种简单的方法让它适用于早期的 Firefox 版本?不幸的是,很难找到这方面的文档。具体来说,我们不想中断启用/禁用插件,即如果用户禁用了插件,那么 page-mod 也应该被禁用(就像 Bootstrap 类那样),并且在启用插件时,它应该是再次启用。

4

1 回答 1

3

require作为 JSM公开是最近才引入的,因此您只是在方法中使用新功能。

对于旧版本,您将不得不创建一个自定义Loader实例,然后可以使用它来要求事物。

于 2015-10-03T22:36:48.713 回答