From 698e7a251dc5d6ca7370570f2b168a6b1dbdabcb Mon Sep 17 00:00:00 2001 From: bihua Date: Fri, 8 Sep 2017 10:42:14 +0800 Subject: [PATCH 1/2] fix utf-16 => utf-8 in javascript DOMStrings are 16-bit-encoded strings some languge in javascript unicode by utf-8 ,etc chinese japenese ... Since DOMStrings are 16-bit-encoded strings, in most browsers calling window.btoa on a Unicode string will cause a Character Out Of Range exception if a character exceeds the range of a 8-bit byte (0x00~0xFF). There are two possible methods to solve this problem: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding --- extension/js/background_page.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/extension/js/background_page.js b/extension/js/background_page.js index f9dcb21..dc20d7f 100755 --- a/extension/js/background_page.js +++ b/extension/js/background_page.js @@ -84,17 +84,17 @@ function setOrangeIcon() { } function getBase64FromArrayBuffer(responseData) { - var uInt8Array = new Uint8Array(responseData), - i = uInt8Array.length, - binaryString = new Array(i); - while (i--) - { - binaryString[i] = String.fromCharCode(uInt8Array[i]); - } - var data = binaryString.join(''), - base64 = window.btoa(data); + var uInt8Array = new Uint8Array(responseData); + var str = new TextDecoder().decode(uInt8Array); + + console.log(str) - return base64; + function b64EncodeUnicode(str) { + return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { + return String.fromCharCode('0x' + p1); + })); + } + return b64EncodeUnicode(str) } // returns an object from the xhr.getAllReponseHeaders text-only version From 199dc024881fb3fde7506124f55fac1972694418 Mon Sep 17 00:00:00 2001 From: bihua Date: Fri, 8 Sep 2017 10:43:08 +0800 Subject: [PATCH 2/2] trim console.log --- extension/js/background_page.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/extension/js/background_page.js b/extension/js/background_page.js index dc20d7f..8f13ff7 100755 --- a/extension/js/background_page.js +++ b/extension/js/background_page.js @@ -87,8 +87,6 @@ function getBase64FromArrayBuffer(responseData) { var uInt8Array = new Uint8Array(responseData); var str = new TextDecoder().decode(uInt8Array); - console.log(str) - function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { return String.fromCharCode('0x' + p1);