2013-02-19 111 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