Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите разобраться! Связка JS+Google API (Youtube) (https://javascript.ru/forum/misc/28001-pomogite-razobratsya-svyazka-js-google-api-youtube.html)

swa 02.05.2012 18:58

Помогите разобраться! Связка JS+Google API (Youtube)
 
На странице встроен flash (hromeles player без панели управления; управление через JS).
Все работает кроме определения длительности подгружаемого ролика.
По документации player должен отдавать свой статус и длительность ролика. При вызове статуса и параметра длительности через alert, все срабатывает. А вот если alert убрать, то присваивание параметра длительности ролика переменной JS не происходит.

Причем статус проигрывания, паузы, окончания проигрывания player возвращает.

Уже голову сломал! :-E

Код передачи параметра длительности:
if (player.getPlayerState()==5 || player.getPlayerState()==1) {
//		alert('player.getPlayerState()='+player.getPlayerState());
		alert('$("#duration").val('+player.getDuration()+')');
		var time = player.getDuration();
		$("#duration").val(time);
	};


Стоит закоментировать 3-ью строку, как присвоение перестает работать. После alert все отлично присваивается...
От безысходности ввел совершенно ненужную переменную time - без толку :)

Спасибо за подсказку!

zebra 02.05.2012 19:58

Скорей всего player.getDuration() асинхронная функция.

swa 02.05.2012 20:05

Что это меняет принципиально? - alert возвращает значение getDuration()
А присваивания нет. Убрать alert - все равно нет присваивания.

zebra 02.05.2012 20:24

Выведите alert(time). Может вообще нету #duration

swa 02.05.2012 23:11

Вы знаете, что самое любопытное - даже просто после пустого alert присваивание срабатывает! Именно нужное правильное значение!

Но если до alert делать присваивание, то возвращает 0 (ноль).

zebra 03.05.2012 00:25

Читайте доку, там описан почему 0 вернуло

swa 03.05.2012 01:05

Буду очень признателен за совет! У меня уже глаз замылился...

zebra 03.05.2012 01:20

Возвращает длительность в секундах видео, воспроизводимого в текущий момент. Обратите внимание на то, что getDuration() возвратит 0, если метаданные видео еще не загружены, что обычно случается в самом начале воспроизведения видео.

swa 03.05.2012 09:25

Это само-собой разумеется!
Однако вызов alert(player.getDuration()) - отдает длительность!

И в JS-коде есть проверка на полностью загруженное и начавшееся воспроизводиться видео:
if (player.getPlayerState()==5 || player.getPlayerState()==1)

Где: player.getPlayerState()
5 - это событие полностью загруженного ролика, 1 - воспроизведение.

zebra 03.05.2012 11:20

Попробуйте изменить условие на такое
if (player.getPlayerState()==5 && player.getPlayerState()==1)


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