From 1ddcadb2418c4cf0b206857f424a9af58c0ed57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Tue, 15 Nov 2016 15:25:51 +0100 Subject: [PATCH] Fix reading ArrayBuffer into string on older browsers Android 4.0 doesn't like the `String.fromCharCode.apply` hack. --- fetch.js | 14 +++++++++++--- test/test.js | 8 +++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/fetch.js b/fetch.js index 29c9859..104d873 100644 --- a/fetch.js +++ b/fetch.js @@ -186,6 +186,16 @@ return promise } + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') + } + function bufferClone(buf) { if (buf.slice) { return buf.slice(0) @@ -260,9 +270,7 @@ if (this._bodyBlob) { return readBlobAsText(this._bodyBlob) } else if (this._bodyArrayBuffer) { - var view = new Uint8Array(this._bodyArrayBuffer) - var str = String.fromCharCode.apply(null, view) - return Promise.resolve(str) + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) } else if (this._bodyFormData) { throw new Error('could not read FormData body as text') } else { diff --git a/test/test.js b/test/test.js index 3044b94..e1b2270 100644 --- a/test/test.js +++ b/test/test.js @@ -64,7 +64,13 @@ function arrayBufferFromText(text) { } function readArrayBufferAsText(buf) { - return String.fromCharCode.apply(null, new Uint8Array(buf)) + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') } var native = {} -- GitLab