jsencrypt 兼容低版本浏览器

记录一个加密插件 jsencrypt.js 在 vue3+ts 中的使用,以及如何兼容低版本 chrome65 浏览器

一、jsencrypt.js 使用

1、下载

npm i jsencrypt

2、创建一个js文件,引入插件并封装一个加密方法

import { JSEncrypt } from 'jsencrypt'

export const encryptedFunc = (pwd) => {
  let encryptor = new JSEncrypt()
  let publicKey = '公钥' // publicKey为公钥,由后端提供
  encryptor.setPublicKey(publicKey)
  let pwdEnctyor = encryptor.encrypt(pwd)
  return pwdEnctyor
}

3、使用示例

import { encryptedFunc } from '@/utils/pwd.js'

// 加密
password: encryptedFunc(form.password)

至此密码就已完成加密,在较新的浏览器中已经可以正常使用了,但是如果在更古老的浏览器中就会有报错了。

二、jsencrypt.js 兼容

当将上面的代码在 chrome65 中运行时,就会报错,试了网上各种各样的方法,比如下载插件代码引入,修改源码中的某些属性,换版本之类的,找了很久后来发现只需要在 index.html 中加入一段代码就可以解决兼容问题

1、解决兼容的代码块

<script>
      !(function(t){function e(){var e = this || self; (e.globalThis = e), delete t.prototype._T_; } "object" != typeof globalThis && (this ? e() : (t.defineProperty(t.prototype, "_T_", {configurable: !0, get: e, }), _T_)) })(Object);
</script>

2、问题详情

当将打包好的文件在低版本浏览器中运行时会报错 globalThis is not defined

百度一下 globalThis:

globalThis在不同环境中的表现
  • 浏览器‌:在浏览器中,通常使用window作为全局对象。虽然某些浏览器尚未完全支持globalThis,但可以通过polyfill来模拟其功能‌。
  • Node.js‌:在Node.js中,globalThis提供了与global相同的功能,但globalThis是更标准化的选择‌3。

应该就是旧版本的浏览器没有 globalThis 这个全局变量,我们现在手动给他创建一个,就解决了。

当然也有很多其他的方法可以解决兼容问题,AI也提供了一些思路,可供大家参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值