diff --git a/CHANGELOG.md b/CHANGELOG.md index 636e20f..64ed11e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2.1.1 + +- Fixed #224: response type "arraybuffer" and "blob" not working on browser platform + ## 2.1.0 - Feature #216: Support for response type `arraybuffer` diff --git a/package.json b/package.json index e5c55ef..1e375a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cordova-plugin-advanced-http", - "version": "2.1.0", + "version": "2.1.1", "description": "Cordova / Phonegap plugin for communicating with HTTP servers using SSL pinning", "scripts": { "updatecert": "node ./scripts/update-e2e-server-cert.js && node ./scripts/update-e2e-client-cert.js", diff --git a/src/browser/cordova-http-plugin.js b/src/browser/cordova-http-plugin.js index 670c49a..aecc81b 100644 --- a/src/browser/cordova-http-plugin.js +++ b/src/browser/cordova-http-plugin.js @@ -52,11 +52,19 @@ function deserializeResponseHeaders(headers) { return headerMap; } +function getResponseData(xhr) { + if (xhr.responseType !== 'text' || jsUtil.getTypeOf(xhr.responseText) !== 'String') { + return xhr.response; + } + + return xhr.responseText; +} + function createXhrSuccessObject(xhr) { return { url: xhr.responseURL, status: xhr.status, - data: jsUtil.getTypeOf(xhr.responseText) === 'String' ? xhr.responseText : xhr.response, + data: getResponseData(xhr), headers: deserializeResponseHeaders(xhr.getAllResponseHeaders()) }; } @@ -65,7 +73,7 @@ function createXhrFailureObject(xhr) { var obj = {}; obj.headers = xhr.getAllResponseHeaders(); - obj.error = jsUtil.getTypeOf(xhr.responseText) === 'String' ? xhr.responseText : xhr.response; + obj.error = getResponseData(xhr); obj.error = obj.error || 'advanced-http: please check browser console for error messages'; if (xhr.responseURL) obj.url = xhr.responseURL; diff --git a/www/helpers.js b/www/helpers.js index 18d8ae4..2598b99 100644 --- a/www/helpers.js +++ b/www/helpers.js @@ -236,6 +236,13 @@ module.exports = function init(jsUtil, cookieHandler, messages, base64) { function injectRawResponseHandler(responseType, cb) { return function (response) { + var dataType = jsUtil.getTypeOf(response.data); + + // don't need post-processing if it's already binary type (on browser platform) + if (dataType === 'ArrayBuffer' || dataType === 'Blob') { + return cb(response); + } + // arraybuffer if (responseType === validResponseTypes[1]) { var buffer = base64.toArrayBuffer(response.data); diff --git a/www/js-util.js b/www/js-util.js index b41a255..e379dba 100644 --- a/www/js-util.js +++ b/www/js-util.js @@ -4,6 +4,8 @@ module.exports = { switch (Object.prototype.toString.call(object)) { case '[object Array]': return 'Array'; + case '[object Blob]': + return 'Blob'; case '[object ArrayBuffer]': return 'ArrayBuffer'; case '[object Boolean]':