Используя API JavaScript YouTube с jQuery

{$expr: {$lt: [{$size: "$array"}, "$field_in_this_document_with_int_value"] }

В запросах $expr вы можете использовать любые допустимые выражения-агрегаторы .

20
задан Steerpike 24 April 2009 в 16:01
поделиться

4 ответа

Редактировать:

По-видимому, вызов addEventListener для объекта player заставляет сценарий использоваться в качестве строки в свойстве XML, которое передается в объект flash - это исключает замыкания и тому подобное, так что пришло время для некрасивого взлома старой школы:

function onYouTubePlayerReady(playerId) {
    var player = $('#'+playerId)[0];

    player.addEventListener('onStateChange', '(function(state) { return playerState(state, "' + playerId + '"); })' );
}

function playerState(state, playerId) {
    console.log(state);
    console.log(playerId);
}

Проверено и работает!

23
ответ дан 30 November 2019 в 00:40
поделиться

Вот хорошая статья, в которой рассказывается о создании класса для упаковки отдельного проигрывателя, включая отправку событий отдельным объектам с использованием аналогичного подхода. к тому, что упоминалось в предыдущем ответе.

http://blog.jcoglan.com/2008/05/22/dispatching-youtube-api-events-to-individual-javascript-objects/

0
ответ дан 30 November 2019 в 00:40
поделиться

Я использую плагин JQuery SWFobject, SWFobject

Важно добавить & enablejsapi = 1 в конце видео

HTML:

<div id="embedSWF"></div>

JQuery:

             $('#embedSWF').flash({ 
                swf: 'http://www.youtube.com/watch/v/siBoLc9vxac',
                params: { allowScriptAccess: "always"},   
                flashvars: {enablejsapi: '1', autoplay: '0', allowScriptAccess: "always", id: 'ytPlayer' },   
                height: 450,   width: 385 });

function onYouTubePlayerReady(playerId) {
                $('#embedSWF').flash(function(){this.addEventListener("onStateChange", "onPlayerStateChange")});
            }
function onPlayerStateChange(newState) {
                   alert(newState);
                 }

onYouTubePlayerReady должен находиться за пределами $ (document) .ready (function (), чтобы его уволили

5
ответ дан 30 November 2019 в 00:40
поделиться

У меня была такая же проблема, и я попробовал принятый ответ. Это не сработало для меня; функция playerState() никогда не вызывалась. Однако это направило меня на правильный путь. В итоге я сделал следующее:

// Within my mediaController "class"
window["dynamicYouTubeEventHandler" + playerID] = function(state) { onYouTubePlayerStateChange(state, playerID); }
  embedElement.addEventListener("onStateChange", "dynamicYouTubeEventHandler" + playerID);
// End mediaController class

// Global YouTube event handler
function onYouTubePlayerStateChange(state, playerID) {
  var mediaController = GetMediaControllerFromYouTubeEmbedID(playerID);
  mediaController.OnYouTubePlayerStateChange(state);
}

Это довольно неприятно, но таково текущее состояние API YouTube JavaScript.


Вот другой полезный/неприятный код, если вы используете какие-либо продвинутые шаблоны прототипирования. В основном это позволяет вам получить экземпляр "класса" из идентификатора плеера YouTube:

// Within my mediaController "class"
// The containerJQElement is the jQuery wrapped parent element of the player ID
// Its ID is the same as the player ID minus "YouTubeEmbed".
var _self = this;
containerJQElement.data('mediaController', _self);
// End mediaController class

// Global YouTube specific functions
function GetMediaControllerFromYouTubeEmbedID(embedID) {      
  var containerID = embedID.replace('YouTubeEmbed', '');
  var containerJQObject = $("#" + containerID);
  return containerJQObject.data('mediaController');      
}

function onYouTubePlayerReady(playerId) {
  var mediaController = GetMediaControllerFromYouTubeEmbedID(playerId);
  mediaController.OnYouTubeAPIReady();
}
1
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: