From 6f8529e4c5ceacc92c97f58a9bc6538879978f3c 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 06867998..3fb6c5fc 100644 --- a/fetch.js +++ b/fetch.js @@ -178,6 +178,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) @@ -252,9 +262,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 c6d53e5a..c24745d1 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 preservedGlobals = {}