Javascript ReferenceError:未在简单Firefox扩展中定义工作程序

Javascript ReferenceError:未在简单Firefox扩展中定义工作程序,javascript,firefox,firefox-addon,firefox-addon-sdk,web-worker,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,Web Worker,我正在创建一个非常简单的Firefox扩展。我使用了cfx init来创建目录结构,并在lib/main.js和data/my_worker.js main.js如下: var worker = new Worker("my_worker.js"); worker.onmessage = function(e) { console.log(e.data); }; worker.postMessage("Bobby"); 和my_worker.js如下所示: self.onmessa

我正在创建一个非常简单的Firefox扩展。我使用了
cfx init
来创建目录结构,并在
lib/main.js
data/my_worker.js

main.js
如下:

var worker = new Worker("my_worker.js");

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
my_worker.js
如下所示:

self.onmessage = function(e) {
    self.postMessage("Hello " + e.data);
};
然后我运行:
cfx run
来运行扩展。结果如下:

var worker = new Worker("my_worker.js");

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
(addon-sdk-1.17)me:libme$cfx在 “/Applications/Firefox.app/Contents/MacOS/Firefox-bin”。使用配置文件 在 “/var/folders/p1/zzdzcrrx6pq96hgsmy5xjqmh0000gp/T/tmp57OYe9.mozrunner”。 console.error:test:Message:ReferenceError:Worker未定义 堆栈:
@resource://jid1-zmowxggdley0aa-at-jetpack/test/lib/main.js:1:9 CuddlefishLoader/options在开始编写代码之前阅读可能是个好主意

需要使用
require
函数导入
main.js
的Firefox附加SDK。没有全局
Worker
对象,因为错误非常明确。内容脚本需要附加到某个HTML页面上;它不能单独存在。获取工作程序的三种最常见的方法是将内容脚本附加到

使用

一个不可见的背景页面,可能就是你想要的

pageWorker = require("sdk/page-worker").Page({
  contentScript: "console.log(document.body.innerHTML);",
  contentURL: "http://en.wikipedia.org/wiki/Internet"
});
请注意,它们的工作方式与
worker
s非常相似,因为它们具有
onMessage
port
属性


还要注意的是,
onMessage
用大写字母
M

在开始编写代码之前阅读可能是个好主意

需要使用
require
函数导入
main.js
的Firefox附加SDK。没有全局
Worker
对象,因为错误非常明确。内容脚本需要附加到某个HTML页面上;它不能单独存在。获取工作程序的三种最常见的方法是将内容脚本附加到

使用

一个不可见的背景页面,可能就是你想要的

pageWorker = require("sdk/page-worker").Page({
  contentScript: "console.log(document.body.innerHTML);",
  contentURL: "http://en.wikipedia.org/wiki/Internet"
});
请注意,它们的工作方式与
worker
s非常相似,因为它们具有
onMessage
port
属性


还要注意的是,在Firefox插件中,
onMessage
是用大写字母
M

拼写的,请使用ChromeWorker而不是worker

main.js中添加以下行

var { ChromeWorker } = require("chrome");
var self = require("sdk/self");
var data = self.data;

var localWorker = new ChromeWorker(data.url("my_worker.js"));

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
self.onmessage = function(e) {
    self.postMessage("Hello " + e.data);
};
my_worker.js

var { ChromeWorker } = require("chrome");
var self = require("sdk/self");
var data = self.data;

var localWorker = new ChromeWorker(data.url("my_worker.js"));

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
self.onmessage = function(e) {
    self.postMessage("Hello " + e.data);
};

将您的my_worker.js文件放入data/目录。

在Firefox插件中,使用ChromeWorker而不是worker

main.js中添加以下行

var { ChromeWorker } = require("chrome");
var self = require("sdk/self");
var data = self.data;

var localWorker = new ChromeWorker(data.url("my_worker.js"));

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
self.onmessage = function(e) {
    self.postMessage("Hello " + e.data);
};
my_worker.js

var { ChromeWorker } = require("chrome");
var self = require("sdk/self");
var data = self.data;

var localWorker = new ChromeWorker(data.url("my_worker.js"));

worker.onmessage = function(e) {
    console.log(e.data);
};

worker.postMessage("Bobby");
self.onmessage = function(e) {
    self.postMessage("Hello " + e.data);
};

把你的my_worker.js文件放到data/目录中。

太棒了,回答得很好。:)太棒了,回答得很好。:)知道如何让webworker importScripts功能为chrome workers工作吗?知道如何让webworker importScripts功能为chrome workers工作吗?