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
|
jsnb,
Огромное спасибо! |
Octane, код расположен на denwer-e.
|
я не знаю как это настраивается на сервере, но когда включен streaming, Chrome возвращает duration=0, а IE11 – Infinity, поэтому результат работы скрипта с нормального сервера может отличатся от работы на тестовом локальном
|
Учту
|
| Часовой пояс GMT +3, время: 18:30. |