我正在编写一个使用Worker进行后台任务的firefox插件。在 browserOverlay.js :
var myWorker = new Worker("chrome://sample_xpcom/content/worker.js");
myWorker.postMessage({type: 10});
在 worker.js :
中importScripts("resource://gre/modules/workers/require.js")
//importScripts("resource://gre/modules/osfile.jsm")
onmessage = function(e) {
console.log('Message received from main script:' + e.data);
if (e.data.type == 10) {
console.log('data:' + e.data.type);
}
}
当前两行被注释掉时,它的效果非常好。否则我在浏览器控制台中收到错误“SyntaxError:let是保留标识符require.js:52:2”。根据MDN文档,OS.File for Workers这种方式是正确的。我究竟做错了什么? Firefox版本为39.0.3。
答案 0 :(得分:1)
我遇到了同样的问题但是能够通过使用ChromeWorker而不是普通工作人员来完成我的插件工作。 尝试使用
var myWorker = new ChromeWorker("chrome://sample_xpcom/content/worker.js");
答案 1 :(得分:0)
根据你的评论:
有一条线"使用严格的"然后"让require =(function(){...})
来自MDN:
首先,在严格模式下,标识符的短列表成为保留关键字。这些单词是
implements, interface, let, package, private, protected, public, static, and yield
。因此,在严格模式下,您无法使用这些名称命名或使用变量或参数。
回答你的另一个问题:
我需要"清洁"还是重新安装firefox?
不,您需要使用不同版本的require.js.
大多数现代浏览器允许您使用let
,它提供了块范围的变量。
例如:
let a = 5;
什么是块范围?例如,在JavaScript中,如果在var
块中声明if...else
,则变量将被提升到范围的 top 。但是,如果您要在let
内声明if...else
,则会保留if...else
块的范围。
require.js
可能会使用let
作为密钥或代码中的其他位置,因此浏览器会大吼大叫说let
是保留关键字(它是...它是一个块范围的变量声明。)
它类似于var for = 5
之类的东西。 for
是保留的关键字,因此您无法执行此操作。
我刚尝试在Firefox 39中执行var let = 5
,它也出错了。