使用 new Audio(),有什么方法可以找出音频文件是否存在?
With new Audio(), is there any way to find out of the audio file exists?
有没有办法从初始化的音频实例中找出音频文件是否存在?
例如,如果我尝试比较现有音频文件和不存在的音频文件:
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.)
return值相同,但控制台记录无法加载媒体资源的错误。有没有办法捕获此消息,或使用音频对象中的任何方法来查明音频文件是否存在?
注意:
我知道我可以向音频源发出 HttpRequest 或 AJAX 请求以检查它是否存在,但想知道是否可以通过更有效的方式完成此操作。
不是同步的,所以立即访问 属性 是行不通的,因为您必须等待浏览器尝试网络请求,但是可以,您可以使用 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
将触发。
有没有办法从初始化的音频实例中找出音频文件是否存在?
例如,如果我尝试比较现有音频文件和不存在的音频文件:
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.)
return值相同,但控制台记录无法加载媒体资源的错误。有没有办法捕获此消息,或使用音频对象中的任何方法来查明音频文件是否存在?
注意: 我知道我可以向音频源发出 HttpRequest 或 AJAX 请求以检查它是否存在,但想知道是否可以通过更有效的方式完成此操作。
不是同步的,所以立即访问 属性 是行不通的,因为您必须等待浏览器尝试网络请求,但是可以,您可以使用 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
将触发。