2 votes

Type de chaîne capitalisée

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 ?

2voto

raidenace Points 8126
base64 = encodeString64(String(xhr.response));

Essayez ceci afin de comprendre la différence :

<script>
x = new String("hello");
alert(typeof x); //prints Object (this is a String object)

x = String("hello"); //or x = "hello";
alert(typeof x); //prints string (this is string with small s - similar to running toString() on a JS object)
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X