J'ai un code similaire au suivant pour télécharger un fichier binaire. Mon objectif est de le convertir en un URI de données base64 tout en supportant les navigateurs plus anciens qui pourraient ne pas connaître ArrayBuffer. Pour l'instant, le code semble fonctionner assez bien.
function download (url) {
'use strict';
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var mime = xhr.getResponseHeader('Content-Type');
var base64;
if (oldIE) {
var rawBytes = ieConvert(xhr.responseBody);
base64 = encodeString64(rawBytes);
} else if (xhr.response instanceof ArrayBuffer) {
var payload = new Uint8Array(xhr.response);
for (var i = 0, buffer = ''; i < payload.length; i++) {
buffer += String.fromCharCode(payload[i]);
}
base64 = window.btoa(buffer);
} else if (xhr.response instanceof String) {
base64 = encodeString64(xhr.response);
}
return 'data:' + mime + ';base64,' + base64;
} else if (xhr.readyState === 4) {
throw "Failed.";
}
};
xhr.send();
}
Mon problème est que lorsque j'utilise le compilateur de fermetures de Google, je reçois un avertissement de type. Évidemment, c'est parce que j'ai utilisé instanceof String
mais instanceof string
ne fonctionne pas car le nom de l'objet doit être en majuscule.
WARNING - actual parameter 1 of encodeString64 does not match formal parameter
found : String
required: string
base64 = encodeString64(xhr.response);
^
0 error(s), 1 warning(s), 85.22012578616352 typed
Une idée de la façon de se débarrasser de cet avertissement ?