HTML5 audio duration в Chrome возвращает NaN
Всем доброго времени суток!Не могу понять, почему при выводе длительности мелодии, Chrome возвращает NaN. Я читал, что duration это делает, когда она не известна.Но как сделать так, чтобы она выводилась во всех браузерах?
<html> <body> <script type="text/javascript"> window.onload=function(){ var myaudio = document.getElementById("myaudio"); var duration = document.getElementById("duration"); duration.innerHTML = myaudio.duration; } </script> <div id="duration"></div> <audio id="myaudio"> <source src="audio.mp3" type="audio/mp3"></source> </audio> </body> </html> Однако я заметил следующее: 1. Если код заключить в событие oncanplay: myaudio.oncanplay=function(){duration.innerHTML = myaudio.duration;}; то всё будет наоборот. 2.Так работает во всех браузерах: myaudio.onloadedmetadata = duration.innerHTML = myaudio.duration; //Это работает в Firefox,но не в Chrome myaudio.onloadedmetadata = function(){duration.innerHTML = myaudio.duration;};//Наоборот |
Лень проверять, но скорее всего так будет работать(только назначтать обработчик надо до включения в audio документ).
myaudio.onloadedmetadata = function(){duration.innerHTML = myaudio.duration;} Делая так: myaudio.onloadedmetadata = duration.innerHTML = myaudio.duration;вы показываете что сами совершенно не понимаете что делаете. |
А с чего ты решал что это "... вывод длительности мелодии ..." ?
|
MallSerg,
так написано в спецификации Aetae, а как оно заработает до включения audio в DOM, если js не сможет его опознать? |
Потестив немного, вылезло следующее:
1. <html> <body> <script type="text/javascript"> window.onload = function(){ var myaudio = document.getElementById("myaudio"); var duration = document.getElementById("duration"); myaudio.onloadedmetadata = function(){duration.innerHTML = myaudio.duration;} }; </script> <div id="duration"></div> <audio id="myaudio"> <source src="audio.mp3" type="audio/mp3"></source> </audio> </body> </html> 2. <html> <body> <div id="duration"></div> <audio id="myaudio"> <source src="audio.mp3" type="audio/mp3"></source> </audio> <script type="text/javascript"> var myaudio = document.getElementById("myaudio"); var duration = document.getElementById("duration"); myaudio.onloadedmetadata = function(){duration.innerHTML = myaudio.duration;} </script> </body> </html> 1 - Работает только в Chrome 2 - Работает и в Chrome, и в Firefox. Вопрос следующий: Как сделать так, чтобы работало как во втором варианте,только с событием onload? |
Любопытно в какой документации?
http://www.w3.org/TR/webaudio/#dfn-setValueCurveAtTime |
MallSerg,
Цитата:
|
Цитата:
|
MallSerg,
http://www.w3schools.com/tags/av_prop_duration.asp В разделе Definition and Usage : "The duration property returns the length of the current audio/video, in seconds". |
На сервере должен быть отключен streaming для аудио файлов, чтобы Chrome и IE правильно отображали duration
|
Часовой пояс GMT +3, время: 13:18. |