js以window.onload方式获取audio.duration的值为NaN,获取不到正确时长?

window.onload=function time(){
var duration = document.getElementById("audio").duration;
document.getElementById("ss").innerHTML=duration;
}
通过服务器访问 获取到的值为NaN.
但如果通过页面上的一个按钮点击,以onclick事件,则能获取到准确时长,这是为什么,如何让页面加载后自动获取并显示音频时长?

楼主用的火狐?火狐好像有这个问题

八、火狐获取duration出错问题

自己测试的时候有时可能因为网络加载慢的问题,火狐获取duration的时候获取不到,得到NaN,这样显示时间和进度条都会出错。所以我监听了canplay事件,当歌曲准备到可以被播放时,才进行获取duration和buffered等相关数据获取操作,貌似火狐没出现上述问题了。

http://dengo.org/archives/1048

我使用IE以及chrome浏览器也出现类似问题,不知道问题出在哪。后来我使用jquery的$(document).ready(function(){}也还是解决不了这个问题

$(document).ready(function(){
//设置视频时间
var allTime=$(".material-vedio-time").prev()[0].duration;
var a=$(".material-vedio-time").prev()[0].currentTime; //0
var b=$(".material-vedio-time").prev()[0].duration; //NaN
});
我的也是取不到

function getTime() {
setTimeout(function () {
var duration = $("#audio")[0].duration;
if(isNaN(duration)){
getTime();
}
else{
console.info("该歌曲的总时间为:"+$("#audio")[0].duration+"秒")
}
}, 10);
}

audio是音频标签不是文件,它可以有很多文件;你可以window.onload = function() {console.log(document.getElementsByTagName("audio")[0].duration)}

我用jq $(document).ready 的时候也是NAN,用js window.onload可以解决谷歌下NAN的问题,但是在IE下还是有问题,IE11进度条也没问题,currentTime也是正常的,,就是这个duration比较烦,一直NAN

setInterval(function (){
var myaudio=document.getElementById("audio");
console.log(parseInt(audio.duration/60));
},1000);
需要设置定时函数去刷新才能正常获取到播放时长

遇到了相同的问题,已解决,监听下canplay事件就行了

ios下获取到的audio.duration是Infinity,各位有没有遇到的呢

参考 http://www.w3school.com.cn/tags/html_ref_eventattributes.asp
中的 Media 事件,
监听 audio 标签的 onloadedmetadata 事件, 当元数据(比如分辨率和时长)被加载时运行的脚本。