我们为Chrome,Firefox和Safari创建了扩展程序。我们的Firefox扩展程序有一个跟踪器tracker.js,这是控制器所需要的:
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;
}
但是,当我尝试从跟踪器中要求控制器文件时,我收到以下错误:
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;
}
但如果我不需要控制器,我会收到一个未定义的错误。如何从跟踪器文件中请求控制器?我无法统一文件,因为Chrome,Firefox和Safari的控制器文件是相同的。跟踪器是不同的(Mozilla没有批准我们的Chrome跟踪器)。
更新:我将控制器代码移动到控制器,并始终从控制器调用跟踪器,它解决了这个问题(跟踪器不使用控制器)。但如果你找到解决这个问题的方法,请告诉我。
答案 0 :(得分:0)
有一个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
工作人员中还有一个require
功能可以像这样使用:
importScripts('resource://gre/modules/workers/require.js');