小程序不能使用window.abot和window.btoa
最近做小程序项目,用到gzip压缩解压缩,使用了pako.js的gzip压缩,后台数据返回后需要解压,网上找到一个方法但是需要用到window的atob方法,小程序并不支持window对象,因此找了一通,在github上找到解决方法,记录一下
解压缩
const unzip = (b64Data) => {
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function (x) { return x.charCodeAt(0); });
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// // unzip
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
//二进制转成字符串
function byteToString(arr) {
if (typeof arr === 'string') {
return arr;
}
var str = '',
_arr = arr;
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/);
if (v && one.length == 8) {
var bytesLength = v[0].length;
var store = _arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2);
}
str += String.fromCharCode(parseInt(store, 2));
i += bytesLength - 1;
} else {
str += String.fromCharCode(_arr[i]);
}
}
return str;
}
strData = byteToString(data)
return strData;
}
如上图所示,abot真机调试时报abot is undefined
解决方法github地址:https://github.com/davidchambers/Base64.js#readme
因为我改了文件名字所以引用如下:
const polyfill = require('../libs/abot.min.js')
// 这里是引用
const {atob} = polyfill;
// 如果你需要用btoa
const {atob,btoa} = polyfill;
完啦~