Как получить источник или идентификатор от обратного вызова проигрывателя YouTube при вызове состояния

Это вопрос, похожий на как передать аргументы в addeventlistner Но сценарий немного отличается при использовании API проигрывателя Youtube.

Итак, у меня есть несколько проигрывателей YouTube на одной странице, используя swfobject:

swfobject.embedSWF("http://www.youtube.com/v/"+video_id+"?enablejsapi=1&version=3&modestbranding=1&theme=light&color=white&autohide=1&controls=1&showinfo=0&iv_load_policy=3&autoplay=0&playerapiid=<%= "ytPlayer#{index}" %>", "<%= "ytPlayer#{index}" %>", "500", "280", "8", null, null, params);

Где я использую ruby ​​для генерации идентификатора объекта ytplayer. И я слушаю событие onStateChange в другой функции.

ytplayer.addEventListener("onStateChange", "onytplayerStateChanged");

function onytplayerStateChanged(newState) {
    if(newState == -1){
        //unstarted
    }else{
        debugger;
    }
}

Но проблема в том, что я не могу знать, из какого ytPlayer исходит это событие. (найдите источник вызывающего абонента в функции onytplayerStateChanged) Поскольку я могу поймать это событие, только следуя точной реализации этой структуры. Я попробовал реализацию на этом, но он победил больше не поймать событие.


person wao813    schedule 12.08.2013    source источник
comment
Можете ли вы поместить это в jsfiddle? Я не знаком с API YouTube, но похоже, что это можно исправить, изменив область видимости.   -  person devnill    schedule 14.12.2013
comment
может быть, я неправильно понимаю вопрос, но похоже, что вам нужно несколько прослушивателей событий для каждого уникального игрока, а не только один.   -  person    schedule 23.01.2014


Ответы (1)


Я думаю, вы можете встроить идентификатор, а затем добавить слушателя к динамической функции, как это предлагается здесь: Как отображать несколько видео YouTube без перекрытия звука

window["dynamicYouTubeEventHandler" + embedid] = function(state) { onytplayerStateChange(state, embedid); }
ytplayer.addEventListener("onStateChange", "dynamicYouTubeEventHandler"+embedid);

(...)

function onytplayerStateChange(newState, playerId) 
person Mario Levrero    schedule 23.01.2014