Помогите разобраться! Связка 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 - без толку :) Спасибо за подсказку! |
Скорей всего player.getDuration() асинхронная функция.
|
Что это меняет принципиально? - alert возвращает значение getDuration()
А присваивания нет. Убрать alert - все равно нет присваивания. |
Выведите alert(time). Может вообще нету #duration
|
Вы знаете, что самое любопытное - даже просто после пустого alert присваивание срабатывает! Именно нужное правильное значение!
Но если до alert делать присваивание, то возвращает 0 (ноль). |
Читайте доку, там описан почему 0 вернуло
|
Буду очень признателен за совет! У меня уже глаз замылился...
|
Возвращает длительность в секундах видео, воспроизводимого в текущий момент. Обратите внимание на то, что getDuration() возвратит 0, если метаданные видео еще не загружены, что обычно случается в самом начале воспроизведения видео.
|
Это само-собой разумеется!
Однако вызов alert(player.getDuration()) - отдает длительность! И в JS-коде есть проверка на полностью загруженное и начавшееся воспроизводиться видео: if (player.getPlayerState()==5 || player.getPlayerState()==1) Где: player.getPlayerState() 5 - это событие полностью загруженного ролика, 1 - воспроизведение. |
Попробуйте изменить условие на такое
if (player.getPlayerState()==5 && player.getPlayerState()==1) |
Часовой пояс GMT +3, время: 19:26. |