2013-02-19 1 views
0

내 브라우저에 작은 mp3 플레이어를 코딩하고 싶습니다. 모든 mp3 파일은 로컬에 저장됩니다.ActiveXObject와 readAsBinaryString() 결합

따라서, 객체가 "readAsBinaryString()"를 지원하지 않습니다, 나는

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

이후

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

를 사용해야하지만이 오류가 발생합니다. 그래서, 나는 "파일"이라는 객체가 정확히 같은 객체가 아니라고 생각합니다.

도와 주시겠습니까? ActiveXObject()와 readAsBinaryString()을 어떻게 결합 할 수 있습니까?

답변

0

new ActiveXObject(...)은 항상 "자동화 개체"를 반환합니다. 이것은 DOM 객체와 다른 유형의 호스트 객체입니다.

구체적 readAsBinaryString 매개 변수로 DOM 오브젝트 File하지만 하지 자동화 개체 일 수있다 Blob 유형의 객체를 기대한다.

그러나이 글을 쓰는 시점에 readAsBinaryStringHTML5 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 개체에 대해 논의 중이라면 버전 9 이상 (source)의 mp3 파일을 지원해야하는 Internet Explorer를 사용하고있는 것 같습니다.

+0

도움을 주셔서 감사합니다. 문제는 다음과 같습니다. ID3v2 태그를 읽어야합니다. 따라서 이진 문자열을 읽어야합니다. 아마도 ActiveXObject()를 통해 이진 문자열을 읽고 ID3 읽기 함수로 보냅니다. – user2089120

+0

실제로 Microsoft ArrayBuffer를 사용하여 저장하는 것보다 비효율적 이었기 때문에 readAsBinaryString()을 삭제할 것을 제안했습니다. 따라서 동일한 메서드가 [readAsArrayBuffer()] (http://www.w3.org/TR/FileAPI/#readAsArrayBuffer)가됩니다. 호환성을 위해 어떤 메서드를 사용할 수 있는지 제대로 감지하고 둘 다 구현하는 함수를 작성하는 것이 좋습니다 (사용 가능한 경우 readAsArrayBuffer()에 대한 환경 설정 사용). –

+0

그냥 이해해야합니다 ... 내가 readAsArrayBuffer()를 사용할 때 Blob 객체가 여전히 필요합니다. 맞습니까? – user2089120