1

我正在尝试在附加组件上使用Stanford Javascript Crypto Lib,但是当我将其代码粘贴到模块上时出现问题。

我在这里做了一个测试项目:

https://builder.addons.mozilla.org/package/209559/latest/

main 函数调用 teste.js 中描述的函数。

如果我只在 teste.js 上留下这段代码

exports.generateKey = generateKey;
/***
 *  Function test (I know that I could not to generate a constant key)
 ***********************************************/
function generateKey(){
    return 123455;
}

main 函数(在 main.js 上)找到函数 generateKey 并在控制台中显示数字 123455。

但是当我添加斯坦福图书馆的代码时,它停止工作,我得到以下错误

TypeError:t.generateKey 不是函数

有人能帮我吗?

非常感谢。

4

1 回答 1

0

加密库使用自己的导出覆盖您的导出:

if(typeof module != 'undefined' && module.exports){
  module.exports = sjcl;
}

我还找不到在哪里或是否记录了这一点,但在每个 SDK 模块中都有一个module对象,其中一个属性module.exportsexports.

因此,未修改的加密库已经是可加载的,并且exports完全覆盖了您之前添加的内容。

我建议不要接触加密库源并按原样使用它(例如命名库sjcl.js并使用它require("./sjcl").encrypt(...))并定义你的包装函数,例如generateKey,在main.js或一个全新的模块中。

于 2013-10-31T13:12:55.203 回答