uni-app 微信小程序导入JSEncrypt报错eval is not function | crypto of undefined
2022-08-24
uni-app导入加密库JSEncrypt,在浏览器端一般没问题,而在小程序端会有类似报错:
eval is not function ...
crypto of undefined ...
不难看出这是小程序环境问题,官方为了安全直接把eval函数禁用了,crypto则是在JSEncrypt中挂载window对象下,而小程序环境没有浏览器那样的window对象。
1. 解决eval问题
选用压缩版,如果用npm/yarn方式安装的依赖库,目录中自带有压缩版jsencrypt.min.js:
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min.js';
2. 解决无window/navigator的问题
先替换全局变量,避免污染主环境的变量:
navigator全部替换为 customNavigator
window全部替换为 customWindow
然后,自定义新的全局变量,在压缩版文件头部添加如下参考代码:
var customNavigator = {
appName: 'Netscape',
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
};
var customWindow = {
ASN1: null,
Base64: null,
Hex: null,
crypto: null,
href: null
};
重新编译项目即可。
参考资料:https://blog.csdn.net/qq_38318589/article/details/115371454