HTML5 Video/Audio播放本地檔案
阿新 • • 發佈:2019-02-14
這段時間經常看到開發者在反覆詢問同一個問題,為什麼通過設定src屬性,不能播放本地的媒體檔案?例如video.src=”D:\test.mp4”。
這是因為瀏覽器中的JavaScript不能直接直接訪問本地資源(例如檔案系統,攝像頭,麥克風等),除非事先得到了使用者的允許。瀏覽器之所以進行該限制也是很有必要的,試想一下,如果JavaScript能夠肆無忌憚的訪問本地的檔案系統,那麼竊取使用者隱私資料就變得輕而易舉了,當用戶訪問網路上的某個網頁時,不知不覺中自己機器上儲存的信用卡卡號,密碼,公司的祕密檔案等隱私檔案或許已經被惡意的JavaScript程式上傳到了遠方的伺服器上,這對使用者來說是不可容忍的。
在得到使用者允許後我們還是可以播放本地檔案的,下面介紹一種方法。
在頁面中插入一個input節點並指定type為file,如果需要播放多個檔案,可以新增屬性multiple。註冊檔案節點被更新時的回撥函式,在回撥函式中呼叫URL.createObjectURL函式來獲取剛選擇檔案的url,然後把該url設定為audio或video的src值即可。
程式碼例項如下:
<html> <body> <input type="file" id="file" onchange="onInputFileChange()"> <audio id="audio_id" controls autoplay loop>Your browser can't support HTML5 Audio</audio> <script> function onInputFileChange() { var file = document.getElementById('file').files[0]; var url = URL.createObjectURL(file); console.log(url); document.getElementById("audio_id").src = url; } </script> </body> </html>
該程式碼在Chrome 30和Firefox 24上測試通過,在IE上應該存在一定的相容性問題(據我所知IE8及以前的版本肯定是不能工作的),因為IE對HTML5的支援不好,不知道IE10有沒有實現相關的API。