Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.05.2012, 18:58
Аватар для swa
swa swa вне форума
Аспирант
Отправить личное сообщение для swa Посмотреть профиль Найти все сообщения от swa
 
Регистрация: 10.04.2009
Сообщений: 50

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

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

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

Код передачи параметра длительности:
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 - без толку

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

Последний раз редактировалось swa, 02.05.2012 в 19:10.
Ответить с цитированием
  #2 (permalink)  
Старый 02.05.2012, 19:58
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Скорей всего player.getDuration() асинхронная функция.
Ответить с цитированием
  #3 (permalink)  
Старый 02.05.2012, 20:05
Аватар для swa
swa swa вне форума
Аспирант
Отправить личное сообщение для swa Посмотреть профиль Найти все сообщения от swa
 
Регистрация: 10.04.2009
Сообщений: 50

Что это меняет принципиально? - alert возвращает значение getDuration()
А присваивания нет. Убрать alert - все равно нет присваивания.
Ответить с цитированием
  #4 (permalink)  
Старый 02.05.2012, 20:24
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Выведите alert(time). Может вообще нету #duration
Ответить с цитированием
  #5 (permalink)  
Старый 02.05.2012, 23:11
Аватар для swa
swa swa вне форума
Аспирант
Отправить личное сообщение для swa Посмотреть профиль Найти все сообщения от swa
 
Регистрация: 10.04.2009
Сообщений: 50

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

Но если до alert делать присваивание, то возвращает 0 (ноль).
Ответить с цитированием
  #6 (permalink)  
Старый 03.05.2012, 00:25
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Читайте доку, там описан почему 0 вернуло
Ответить с цитированием
  #7 (permalink)  
Старый 03.05.2012, 01:05
Аватар для swa
swa swa вне форума
Аспирант
Отправить личное сообщение для swa Посмотреть профиль Найти все сообщения от swa
 
Регистрация: 10.04.2009
Сообщений: 50

Буду очень признателен за совет! У меня уже глаз замылился...
Ответить с цитированием
  #8 (permalink)  
Старый 03.05.2012, 01:20
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Возвращает длительность в секундах видео, воспроизводимого в текущий момент. Обратите внимание на то, что getDuration() возвратит 0, если метаданные видео еще не загружены, что обычно случается в самом начале воспроизведения видео.
Ответить с цитированием
  #9 (permalink)  
Старый 03.05.2012, 09:25
Аватар для swa
swa swa вне форума
Аспирант
Отправить личное сообщение для swa Посмотреть профиль Найти все сообщения от swa
 
Регистрация: 10.04.2009
Сообщений: 50

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

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

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

Последний раз редактировалось swa, 03.05.2012 в 10:36.
Ответить с цитированием
  #10 (permalink)  
Старый 03.05.2012, 11:20
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться ... Я новенький в JS ... bogong Общие вопросы Javascript 23 27.12.2011 19:20
History API. Помогите решить проблему InviS Events/DOM/Window 2 16.10.2011 14:34
Помогите разобраться со скриптом слайдшоу InviS jQuery 0 23.09.2010 14:47
Google Chart API mycoding Оффтопик 0 14.07.2010 11:22
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28