我有一个HTML5文件,用javascript来加载声音。声音可能位于以下两个位置之一:
../../ Apps / 应用名称 /声音
或
的 ../../共享/声音
应该发生的是,当调用函数getSound
时,它首先检查声音的第一个位置,如果该文件不存在,则转到第二个位置。我之前尝试了几件事,但都没有。
NB 变量blink
存储字符串" ../../ Apps / 应用名称"
function getSound(s){
var url = blink + "sounds/" + s;
var testSound = new Audio(url);
if ( isNan(testSound.duration) ){
url = "../../Shared/Sounds";
}
return new Audio(url);
};
这不起作用,因为显然持续时间一直持续到NaN,直到它开始播放,所以isNan函数总是返回true。
我还尝试过在网上找到的fileExists
功能:
function fileExists(url){
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
所以我要问的是,有没有办法检查声音文件是否存在使用javascript,或者是否可以检查声音文件是否实际加载到您正在使用的变量中。
答案 0 :(得分:3)
使用
var sound = new Audio("sample_src");
if(isNaN(sound.duration)) alert("Do something");
编辑:播放音频后有效。 更好的选择:
var sound = new Audio("sample_src");
$(sound).on("canplay",function(){
//Do something if works
});
答案 1 :(得分:1)
如果文件不存在,则会触发错误事件
mySound = new Audio();
mySound.onerror = function(){ alert("error");};
mySound.src = "xxxx";
问题是这不是同步的。
答案 2 :(得分:0)
在我看来,您所说的话很复杂。当音频对象加载文件时,找不到文件时,浏览器将导致错误。 要检查是否存在音频对象时,只需检查服务器返回浏览器的文件时间即可。
这是正确的功能...
function audiovideoExist(ObjectAV){
var exist = (Number.isFinite(ObjectAV.duration))? true: false;
return exist;
}
因此,如果浏览器找到了源,则它将返回true和false。有效音频或视频对象的持续时间值将始终存在。