Помогите разобраться! Связка 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) |
Одновременно оба события не могут произойти.
Вначале плеер загружает ролик, размечает его и возвращает "5", когда начинается и идет воспроизведение возвращается "1". Также возвращаются свои state при паузе, окончании воспроизведения. Блин! без алерта, отдает 0 (ноль), стоит поставить даже пустой (alert('')) и данные отдаются.... |
Цитата:
Цитата:
|
Melky, прежде чем влезать в ветвь обсуждения с советами, нужно ознакомиться с сообщениями.
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
PS. прежде чем указывать и возмущаться, подумайте, к чему была написана критика. Удачи Вам. |
Melky! Вы вы видите текст? - видео уже воспроизводится!
Сделана проверка на полную(!) загрузку метаданных: getPlayerState()==5 и более того или на уже воспроизводящееся видео getPlayerState()==1 Поэтому, пожалуйста, не надо отделываться пустыми советами "читать документацию". И свою "критику", как и "советы" оставьте при себе. |
Цитата:
|
melky, я вас прошу более в мои топики не заглядывать. И упаси Боже, что-либо комментировать.
|
swa,
вам бы стоило прислушаться к советам melky, а не ерничать, человек вам дело говорит, можно сказать тычет пальцем на вашу ошибку, а вы пытаетесь изворачиваться в строну умного и знающего. Для начала почитайте учебники, разберитесь в вопросах синхронности/асинхронности а уж затем ерничайте в тех случаях если вы точно знаете о чем говорите. |
Часовой пояс GMT +3, время: 03:22. |