2013-02-19 68 views
0

我想在我的浏览器中编写一个小型MP3播放器。所有的mp3文件都保存在本地。Combine 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,它应该支持版本9+以上的MP3文件(source)。

+0

非常感谢您的帮助!问题是:我必须读取ID3v2标签 - 因此,我必须读取二进制字符串...也许我可以通过ActiveXObject()读取二进制字符串并将其发送给ID3读取函数 – user2089120 2013-02-20 07:58:27

+0

它实际上是Microsoft建议删除readAsBinaryString(),因为与使用ArrayBuffer进行存储相比,效率较低。因此,等效方法是[readAsArrayBuffer()](http://www.w3.org/TR/FileAPI/#readAsArrayBuffer)。为了兼容性的目的,我建议编写一个函数,以正确检测哪个方法可用并实现两者 - 如果可用,则优先使用readAsArrayBuffer()。 – 2013-02-20 12:19:36

+0

只是为了理解它......当我使用readAsArrayBuffer()时,Blob对象仍然是必需的,对吧? – user2089120 2013-02-20 19:09:00