API проигрывателя YouTube: получение ссылки на существующий проигрыватель

Я разрабатываю расширение Google Chrome, используя скрипт содержимого. Я хочу взаимодействовать со страницами со встроенным видеоплеером YouTube. Я включил www-widgetapi-vfljlXsRD.js в качестве файла JavaScript, и пространство имен YouTube правильно инициализировано внутри песочницы расширения.

Я пытаюсь получить ссылку на существующий проигрыватель iFrame. Чтобы добиться этого, я попробовал это:

var ytplayer = new YT.Player('ytplayer'); 
ytplayer.pauseVideo();

где div#ytplayer — это iFrame, в который встроен реальный проигрыватель.

Я получаю эту ошибку, сообщающую, что метод не существует:

TypeError: объект # не имеет метода «pauseVideo»

Как правильно получить ссылку на существующий проигрыватель?


person arnaud.breton    schedule 12.06.2013    source источник
comment
Если вы хотите только приостановить/воспроизвести видео, взгляните на первую ссылку справа от этого вопроса (под соответствующим заголовком).   -  person Rob W    schedule 13.06.2013
comment
Я хочу получить текущее время видео на самом деле. Спасибо за вашу помощь   -  person arnaud.breton    schedule 14.06.2013


Ответы (2)


Раньше я использовал API проигрывателя YouTube, и он работал правильно. Сегодня у меня такие же проблемы, как у вас, и я ничего не менял в своем коде. Это может означать, что www-widgetapi-vfljlXsRD.js был изменен и содержит ошибки... Больше ничем помочь не могу.

person ek_    schedule 12.06.2013
comment
Теперь проблема решена, но я все еще не могу получить ссылку на существующий проигрыватель. У вас получается сделать это на вашей стороне? - person arnaud.breton; 14.06.2013

Хорошо, я нашел способ поговорить с существующим игроком. На самом деле мне не удалось получить рабочую ссылку на него.

Меня вдохновила потрясающая работа Роба (см. YouTube iframe API: как мне управлять проигрывателем iframe, который уже находится в HTML?), я заметил, что проигрыватель Youtube отправляет сообщение в главное окно , как это:

{"event":"infoDelivery","info":{"currentTime":3.3950459957122803,"videoBytesLoaded":244,"videoLoadedFraction":0.24482703466872344},"id":1}

Вы можете наблюдать это, прослушивая событие "сообщение" window.addEventListener('message', function (event) {console.log(event.data)}, false); в окне, содержащем играющий плеер.

Это событие infoDelivery содержит текущее время игрока и отправляется во время воспроизведения видео. Прослушивая это событие, я теперь могу узнать текущее время игрока.

Я пока не нашел подходящего решения, так что на данный момент это будет работать.

person arnaud.breton    schedule 14.06.2013