2013-02-19 4 views
0

Я хотел был бы закодировать маленький mp3-плеер в моем браузере. Все mp3-файлы сохраняются локально.Комбинация ActiveXObject и readAsBinaryString()

Итак, я должен использовать

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

и позже

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

Но я получаю ошибку, что объект не поддерживает "readAsBinaryString()". Итак, я думаю, что объект «файл» - это не совсем тот же объект, как и ожидалось.

Не могли бы Вы помочь мне? Как я могу объединить ActiveXObject() и readAsBinaryString()?

ответ

0

new ActiveXObject(...) всегда будет возвращать «объект автоматизации». Это другой тип объекта-хоста по сравнению с объектами DOM.

В частности, readAsBinaryString ожидает, что в качестве параметра объект типа Blob, который может быть объектом DOM File, но не объекта автоматизации.

Однако на момент написания этой статьи readAsBinaryString был сброшен с HTML5 File API draft.

Вместо того, чтобы читать звуковой файл, лучший подход будет использовать HTML5 <audio> тег:

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

HTML5 ссылки аудио теги: https://developer.mozilla.org/en-US/docs/HTML/Element/audio

Пожалуйста, не забудьте проверить, если ваш браузер поддерживает желаемый аудиоформат. Например, не каждый браузер будет поддерживать «mp3». Если вы обсуждаете объекты ActiveX, предположительно вы используете Internet Explorer, который должен поддерживать mp3-файлы с версии 9+ (source).

+0

Большое спасибо за помощь! Проблема в том, что я должен читать теги ID3v2, поэтому мне нужно прочитать двоичную строку ... Возможно, я могу прочитать двоичную строку через ActiveXObject() и отправить ее в функцию чтения ID3 – user2089120

+0

Это было фактически Microsoft который предложил сбросить readAsBinaryString(), потому что он был неэффективен по сравнению с хранением его с помощью ArrayBuffer. Следовательно, эквивалентный метод будет [readAsArrayBuffer()] (http://www.w3.org/TR/FileAPI/#readAsArrayBuffer). В целях совместимости я бы рекомендовал написать функцию, которая должным образом определяет, какой метод доступен и реализуется как с предпочтением readAsArrayBuffer(), если он доступен. –

+0

Просто, чтобы понять это правильно ... когда я использую readAsArrayBuffer(), объект Blob по-прежнему необходим, правильно? – user2089120