2013-02-19 4 views
0

Je voudrais coder un petit lecteur mp3 dans mon navigateur. Tous les fichiers mp3 sont enregistrés localement.Combiner ActiveXObject et readAsBinaryString()

Alors, je dois utiliser

var filePath = '...'; 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var file = fso.GetFile(filePath); 

et plus tard

var oFReader = new FileReader(); 
oFReader.readAsBinaryString(file); 

Mais je reçois l'erreur, que l'objet ne supporte pas les "readAsBinaryString()". Donc, je pense que l'objet "fichier" n'est pas exactement le même objet, comme prévu.

Pourriez-vous s'il vous plaît aide-moi? Comment puis-je combiner l'ActiveXObject() et le readAsBinaryString()?

Répondre

0

new ActiveXObject(...) retournera toujours un "objet automation". C'est un type différent d'objet hôte comparé aux objets DOM.

Plus précisément, readAsBinaryString attend comme paramètre un objet de type Blob, qui peut être un objet DOM File mais pas un objet d'automatisation.

Cependant, au moment de la rédaction de ce document, readAsBinaryString a été supprimé du HTML5 File API draft.

Au lieu d'essayer de lire le fichier audio, une meilleure approche serait d'utiliser la balise HTML5 <audio>:

<audio autoplay="autoplay"> 
    <source src="YOUR_FILE_PATH_GOES_HERE" type="audio/wav"> 
</audio> 

référence audio tag HTML5: https://developer.mozilla.org/en-US/docs/HTML/Element/audio

S'il vous plaît assurez-vous de vérifier si votre navigateur supporte le format audio désiré. Par exemple, tous les navigateurs ne prendront pas en charge "mp3". Si vous discutez d'objets ActiveX, vous utilisez vraisemblablement Internet Explorer qui devrait supporter les fichiers mp3 de la version 9+ (source).

+0

Merci beaucoup pour votre aide !! Le problème est: Je dois lire les balises ID3v2 - donc, je dois lire la chaîne binaire ... Peut-être que je peux lire la chaîne binaire via ActiveXObject() et l'envoyer à la fonction ID3-read – user2089120

+0

Il était en fait Microsoft cela proposait d'abandonner readAsBinaryString() car il était inefficace comparé au stockage avec ArrayBuffer. Par conséquent, la méthode équivalente serait [readAsArrayBuffer()] (http://www.w3.org/TR/FileAPI/#readAsArrayBuffer). Pour des raisons de compatibilité, je recommanderais d'écrire une fonction qui détecte correctement la méthode disponible et de l'implémenter - avec une préférence pour readAsArrayBuffer() si elle est disponible. –

+0

Juste pour bien le comprendre ... quand j'utilise readAsArrayBuffer(), un objet Blob est toujours nécessaire, non? – user2089120

Questions connexes