Browse Source

use TextDecoder instead of FileReader

Gildas 7 năm trước cách đây
mục cha
commit
e4d112d1f0
1 tập tin đã thay đổi với 8 bổ sung8 xóa
  1. 8 8
      lib/single-file/single-file-browser.js

+ 8 - 8
lib/single-file/single-file-browser.js

@@ -18,7 +18,7 @@
  *   along with SingleFile.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* global SingleFileCore, btoa, DOMParser, getComputedStyle, FileReader, window, fetch */
+/* global SingleFileCore, btoa, DOMParser, getComputedStyle, TextDecoder, window, fetch */
 
 this.SingleFile = (() => {
 
@@ -55,13 +55,13 @@ this.SingleFile = (() => {
 			} else {
 				const matchCharset = contentType.match(/\s*;\s*charset\s*=\s*(.*)(;|$)/i);
 				if (matchCharset && matchCharset[1]) {
-					const fileReader = new FileReader();
-					const blob = await resourceContent.blob();
-					fileReader.readAsText(blob, matchCharset[1]);
-					return new Promise((resolve, reject) => {
-						fileReader.onload = event => resolve(event.target.result);
-						fileReader.onerror = reject;
-					});
+					const charSet = matchCharset[1].toLowerCase();
+					if (charSet != "utf-8") {
+						const arrayBuffer = await resourceContent.arrayBuffer();
+						return (new TextDecoder(charSet)).decode(arrayBuffer);
+					} else {
+						return resourceContent.text();
+					}
 				} else {
 					return resourceContent.text();
 				}