From bac8468a7cd212df57755d36d1840d845eb3bccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BA=9A=E7=90=AA?= Date: Mon, 27 Sep 2021 19:39:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Duni-id=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3=E4=BD=BF=E7=94=A8atob=E5=9C=A8?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81=E7=9A=84=E5=B9=B3=E5=8F=B0=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=8A=A5=E9=94=99=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/uni-vue/src/uni-id-mixin.ts | 49 +++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/uni-vue/src/uni-id-mixin.ts b/packages/uni-vue/src/uni-id-mixin.ts index 658e9e75f..fbe4d4e67 100644 --- a/packages/uni-vue/src/uni-id-mixin.ts +++ b/packages/uni-vue/src/uni-id-mixin.ts @@ -1,6 +1,53 @@ +let realAtob: (b64Str: string) => string + +const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' +const b64re = + /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/ + +if (typeof atob !== 'function') { + realAtob = function (str: string) { + str = String(str).replace(/[\t\n\f\r ]+/g, '') + if (!b64re.test(str)) { + throw new Error( + "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded." + ) + } + + // Adding the padding if missing, for semplicity + str += '=='.slice(2 - (str.length & 3)) + var bitmap + var result = '' + var r1 + var r2 + var i = 0 + for (; i < str.length; ) { + bitmap = + (b64.indexOf(str.charAt(i++)) << 18) | + (b64.indexOf(str.charAt(i++)) << 12) | + ((r1 = b64.indexOf(str.charAt(i++))) << 6) | + (r2 = b64.indexOf(str.charAt(i++))) + + result += + r1 === 64 + ? String.fromCharCode((bitmap >> 16) & 255) + : r2 === 64 + ? String.fromCharCode((bitmap >> 16) & 255, (bitmap >> 8) & 255) + : String.fromCharCode( + (bitmap >> 16) & 255, + (bitmap >> 8) & 255, + bitmap & 255 + ) + } + return result + } +} else { + // 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法 + realAtob = atob +} + function b64DecodeUnicode(str: string): string { return decodeURIComponent( - atob(str) + realAtob(str) .split('') .map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) -- GitLab