From 0609fa1ff9d7bc33550f9bb22b2736b5477dc527 Mon Sep 17 00:00:00 2001 From: Tony Kovanen Date: Sun, 16 Mar 2014 02:31:15 +0200 Subject: [PATCH 1/2] Added android to zuul browsers --- .zuul.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.zuul.yml b/.zuul.yml index 38bc342e..fb9da14d 100644 --- a/.zuul.yml +++ b/.zuul.yml @@ -14,3 +14,5 @@ browsers: version: [6..9, latest] - name: iphone version: oldest..latest + - name: android + version: latest From 112c37966b46db2f7e81c690952be41712faf8e8 Mon Sep 17 00:00:00 2001 From: Tony Kovanen Date: Sun, 16 Mar 2014 14:28:04 +0200 Subject: [PATCH 2/2] Encoding binary as ArrayBuffer for android, because blob data is sent as empty payload --- lib/browser.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/browser.js b/lib/browser.js index 6c3c16b7..95cb94b3 100644 --- a/lib/browser.js +++ b/lib/browser.js @@ -7,6 +7,15 @@ var sliceBuffer = require('arraybuffer.slice'); var base64encoder = require('base64-arraybuffer'); var after = require('after'); +/** + * Check if we are running an android browser. That requires us to use + * ArrayBuffer with polling transports... + * + * http://ghinda.net/jpeg-blob-ajax-android/ + */ + +var isAndroid = navigator.userAgent.match(/Android/i); + /** * Current protocol version. */ @@ -69,7 +78,7 @@ exports.encodePacket = function (packet, supportsBinary, callback) { if (global.ArrayBuffer && data instanceof ArrayBuffer) { return encodeArrayBuffer(packet, supportsBinary, callback); - } else if (Blob && data instanceof Blob) { + } else if (Blob && data instanceof global.Blob) { return encodeBlob(packet, supportsBinary, callback); } @@ -124,6 +133,10 @@ function encodeBlob(packet, supportsBinary, callback) { return exports.encodeBase64Packet(packet, callback); } + if (isAndroid) { + return encodeBlobAsArrayBuffer(packet, supportsBinary, callback); + } + var length = new Uint8Array(1); length[0] = packets[packet.type]; var blob = new Blob([length.buffer, packet.data]); @@ -246,9 +259,10 @@ exports.encodePayload = function (packets, supportsBinary, callback) { } if (supportsBinary) { - if (Blob) { + if (Blob && !isAndroid) { return exports.encodePayloadAsBlob(packets, callback); } + return exports.encodePayloadAsArrayBuffer(packets, callback); }