有没有办法找出初始化音频实例中是否存在音频文件?
例如,如果我尝试比较现有音频和不存在的音频文件:
new Audio('exists.mp3').readyState => 0
new Audio('does_not_exist.mp3').readyState => 0
(HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://amc.narom.no/Steid failed.)
返回值相同,但控制台记录了无法加载媒体资源的错误。有没有办法捕获此消息,或使用Audio对象中的任何方法来确定音频文件是否存在?
注意: 我知道我可以对音频源做一个HttpRequest或AJAX请求来检查它是否存在,但是想知道这是否可以以更有效的方式完成。
答案 0 :(得分:3)
不同步,所以立即访问属性将无法正常工作,因为您必须等待浏览器尝试网络请求,但是,您可以使用error
和loadeddata
事件(可选择替换其他类似的媒体事件,以确定成功。)
var a = new Audio('doesitexist.mp3');
a.onerror = function() {
console.log('File does not exist.');
};
a.onloadeddata = function() {
console.log('File exists.');
};
在至少部分数据成功加载之前,loadeddata
事件才会触发,如果请求返回404错误之类的无效响应,则会触发error
。