Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2014, 09:07
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

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

Последний раз редактировалось jule, 25.06.2014 в 09:12.
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2014, 09:26
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,565

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

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

Последний раз редактировалось Aetae, 25.06.2014 в 09:31.
Ответить с цитированием
  #3 (permalink)  
Старый 25.06.2014, 09:28
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

А с чего ты решал что это "... вывод длительности мелодии ..." ?
Ответить с цитированием
  #4 (permalink)  
Старый 25.06.2014, 10:17
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

MallSerg,
так написано в спецификации
Aetae, а как оно заработает до включения audio в DOM, если js не сможет его опознать?
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2014, 11:01
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

Потестив немного, вылезло следующее:
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?
Ответить с цитированием
  #6 (permalink)  
Старый 25.06.2014, 12:00
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

Любопытно в какой документации?
http://www.w3.org/TR/webaudio/#dfn-setValueCurveAtTime
Ответить с цитированием
  #7 (permalink)  
Старый 25.06.2014, 12:18
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

MallSerg,
Цитата:
The duration parameter is the amount of time in seconds...
Ответить с цитированием
  #8 (permalink)  
Старый 25.06.2014, 12:21
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от jule Посмотреть сообщение
Вопрос следующий: Как сделать так, чтобы работало как во втором варианте,только с событием onload?
Как вариант: http://learn.javascript.ru/play/XyFeLb
Ответить с цитированием
  #9 (permalink)  
Старый 25.06.2014, 12:22
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

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".
Ответить с цитированием
  #10 (permalink)  
Старый 25.06.2014, 12:23
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HTML5 audio, onClick mvadim007 Общие вопросы Javascript 5 01.04.2014 18:26
API у AUDIO тега в HTML5 у вас работает? Damir Общие вопросы Javascript 7 24.03.2013 12:21
html5, Canvas, KineticJS, cvg, google chrome N3K Библиотеки/Тулкиты/Фреймворки 0 20.07.2012 12:43
HTML5 Audio Загрузка Severtain Общие вопросы Javascript 0 09.05.2012 13:09
select .text() с числами в Chrome возвращает null m3hc jQuery 4 26.09.2011 16:36