【问题标题】:Why the error message "SyntaxError: let is a reserved identifier require.js:52:2" appears when developing firefox addon?为什么开发firefox插件时会出现“SyntaxError: let is a reserved identifier require.js:52:2”的错误信息?
【发布时间】:2015-10-30 11:46:40
【问题描述】:

我正在编写一个使用 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 is a reserved identifier require.js:52:2"。根据 MDN 文档,OS.File for Workers 这种方式是正确的。我究竟做错了什么? Firefox 版本为 39.0.3。

【问题讨论】:

  • @limelights,如何在 Worker 构造函数中为脚本指定 version=1.7?我在 browserOverlay.xul 中尝试过<script type="application/x-javascript;version=1.7 "src="..."/>,但没有结果

标签: javascript firefox


【解决方案1】:

我遇到了同样的问题,但能够通过使用 ChromeWorker 而不是普通工作人员来使我的插件工作。 尝试使用

var myWorker = new ChromeWorker("chrome://sample_xpcom/content/worker.js"); 

【讨论】:

    【解决方案2】:

    编辑

    根据您的评论:

    有一行“use strict”,然后是“let require = (function(){...})

    来自MDN

    首先,在严格模式下,标识符的简短列表成为保留关键字。这些词是implements, interface, let, package, private, protected, public, static, and yield。因此,在严格模式下,您不能使用这些名称命名或使用变量或参数。

    回答你的其他问题:

    我需要“清理”或重新安装 firefox 吗?

    不,您需要使用不同版本的 require.js。

    原答案

    大多数现代浏览器允许您使用let,它提供块范围的变量。

    例如:

    let a = 5;
    

    什么是块作用域?例如,在 JavaScript 中,如果您在 if...else 块内声明 var,则该变量将被提升到范围的 top。但是,如果您要在 if...else 内声明 let,则它的作用域将保留在该 if...else 块中。

    require.js 很可能在代码中使用let 作为键或其他位置,所以浏览器对你大喊大叫let 是保留关键字(它是......它是一个块-范围变量声明。)

    类似于var for = 5 之类的操作。 for 是保留关键字,所以不能这样做。

    我刚刚尝试在 Firefox 39 中执行 var let = 5,它也报错了。

    【讨论】:

    • 奇怪,require.js 的版本有 no 裸词let,只是构成completedelete 的一部分。不是说你错了,也许OP有不同的版本。
    • @paxdiablo,你能详细说明“只是那些构成完整或删除的部分”吗?
    • 乔希,如果我在我的 js 文件中搜索let,它只会显示很多“de let e”和“comp let e” "的话。
    • 如何解决这个问题?我需要 modules/osfile.jsm 用于文件 I/O。我已经阅读了 JS 中的“强”语法。看起来有些 JS 库不兼容。我需要“清理”或重新安装 Firefox 吗?
    • @PavelMikhaylov,你所说的“强”语法是什么意思?如果您指的是'use strict';,那么是的,这不允许使用任何当前正在使用的 ES6 特性(如 let 等)。
    猜你喜欢
    • 2016-03-28
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2010-10-30
    • 2018-08-05
    相关资源
    最近更新 更多