Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   HTML5 audio duration в Chrome возвращает NaN (https://javascript.ru/forum/misc/48215-html5-audio-duration-v-chrome-vozvrashhaet-nan.html)

jule 25.06.2014 09:07

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;};//Наоборот

Aetae 25.06.2014 09:26

Лень проверять, но скорее всего так будет работать(только назначтать обработчик надо до включения в audio документ).
myaudio.onloadedmetadata = function(){duration.innerHTML = myaudio.duration;}

Делая так:
myaudio.onloadedmetadata = duration.innerHTML = myaudio.duration;
вы показываете что сами совершенно не понимаете что делаете.

MallSerg 25.06.2014 09:28

А с чего ты решал что это "... вывод длительности мелодии ..." ?

jule 25.06.2014 10:17

MallSerg,
так написано в спецификации
Aetae, а как оно заработает до включения audio в DOM, если js не сможет его опознать?

jule 25.06.2014 11:01

Потестив немного, вылезло следующее:
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?

MallSerg 25.06.2014 12:00

Любопытно в какой документации?
http://www.w3.org/TR/webaudio/#dfn-setValueCurveAtTime

jule 25.06.2014 12:18

MallSerg,
Цитата:

The duration parameter is the amount of time in seconds...

jsnb 25.06.2014 12:21

Цитата:

Сообщение от jule (Сообщение 317914)
Вопрос следующий: Как сделать так, чтобы работало как во втором варианте,только с событием onload?

Как вариант: http://learn.javascript.ru/play/XyFeLb

jule 25.06.2014 12:22

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".

Octane 25.06.2014 12:23

На сервере должен быть отключен streaming для аудио файлов, чтобы Chrome и IE правильно отображали duration


Часовой пояс GMT +3, время: 13:18.