javascript - 如何在 Firefox 扩展(附加组件)中请求文件?

标签 javascript firefox-addon

我们为 Chrome、Firefox 和 Safari 创建了扩展程序。我们的 Firefox 扩展有一个跟踪器 tracker.js, Controller 需要通过以下行来获取它:

tracker = require("../../firefox/tracker.js").tracker;

跟踪器需要其他文件才能工作,例如:

if (typeof exports !== 'undefined') {
    common = require("../content/src/common.js").common;
    utils = require("../content/src/utils.js").utils;
}

var tracker = new function() {
    this.ws_track = function(params) {
        params["from_extension"] = true;
        params["platform"] = common.sys.platform;
        params["version"] = utils.get_version();
        if (params["e"] === "install") {
            utils.send_get_request(common.config.urls.apis.wstrack, params, function(data) {}, 'json');
        }
    };
};

if (typeof exports !== 'undefined') {
    exports.tracker = tracker;
}

但是,当我尝试从跟踪器请求 Controller 文件时,我收到以下错误:

JPM [error]   Message: TypeError: tracker is undefined

以下是本例中的跟踪器代码:

if (typeof exports !== 'undefined') {
    common = require("../content/src/common.js").common;
    controller = require("../content/src/controller.js").controller;
    utils = require("../content/src/utils.js").utils;
}

var tracker = new function() {
    this.ws_track = function(params) {
        params["from_extension"] = true;
        params["platform"] = common.sys.platform;
        params["version"] = utils.get_version();
        var uid = controller.load_param("uid");
        if (uid) {
            params["uid"] = uid;
        }
        if (params["e"] === "install") {
            utils.send_get_request(common.config.urls.apis.wstrack, params, function(data) {}, 'json');
        }
    };
};

if (typeof exports !== 'undefined') {
    exports.tracker = tracker;
}

但是如果我不需要 Controller ,我会收到一条错误消息,指出它未定义。如何从跟踪器文件中获取 Controller ?我无法合并这些文件,因为 Chrome、Firefox 和 Safari 的 Controller 文件相同。而且跟踪器不同(Mozilla 没有批准我们的 Chrome 跟踪器)。

更新:我将 Controller 代码移至 Controller ,并始终从 Controller 调用跟踪器,它解决了此问题(跟踪器不使用 Controller )。但如果您找到解决此问题的方法,请告诉我。

最佳答案

有一个SDK需要功能,我这样使用它 - https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/system_child_process#Using_child_process_in_non-jpm_extensions

// Import SDK Stuff
const COMMONJS_URI = 'resource://gre/modules/commonjs';
const { require } = Cu.import(COMMONJS_URI + '/toolkit/require.js', {});
var child_process = require('sdk/system/child_process');

// Use it in the same way as in the example above

它似乎适用于 CommonJS 模块,看看这个 - https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using#Importing_CommonJS_modules

workers 中还有一个 require 函数,可以这样使用:

importScripts('resource://gre/modules/workers/require.js');

关于javascript - 如何在 Firefox 扩展(附加组件)中请求文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616365/

相关文章:

javascript - 从 TabNavigator 内部 View 与 StackNavigator 的导航选项交互

php - ajax中的jqGrid本地数据

javascript - AngularJS - 如何在多个实例中限制 ngClick 的范围

javascript - 如何使用 nsIProcess 在 JavaScript 中运行没有窗口的 Windows 命令

javascript - 从 Firefox 附加内容脚本复制到剪贴板

javascript - 数组填充后如何加载页面?

firefox - 如何开发 Firefox 插件?

javascript - 在特定页面加载时加载 firefox 扩展

javascript - 如何识别浏览器元素的选项卡关闭事件 [XUL/firefox]

javascript - 当文档的宽度发生变化时更改 Javascript 规则