使用新的Audio(),有没有办法找出音频文件存在?

时间:2016-05-30 16:36:14

标签: javascript audio html5-audio

有没有办法找出初始化音频实例中是否存在音频文件?

例如,如果我尝试比较现有音频和不存在的音频文件:

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请求来检查它是否存在,但是想知道这是否可以以更有效的方式完成。

1 个答案:

答案 0 :(得分:3)

不同步,所以立即访问属性将无法正常工作,因为您必须等待浏览器尝试网络请求,但是,您可以使用errorloadeddata事件(可选择替换其他类似的媒体事件,以确定成功。)

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