为什么在开发firefox插件时出现错误消息“SyntaxError:let是保留标识符require.js:52:2”?

时间:2015-08-07 06:09:48

标签: javascript firefox

我正在编写一个使用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。

2 个答案:

答案 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,它也出错了。