2013-08-12 32 views
5

Đây là câu hỏi tương tự như how to pass arguments to addeventlistner Nhưng kịch bản có một chút khác biệt bằng cách sử dụng api của trình phát Youtube.Cách lấy nguồn hoặc id từ youtube player onstatechange gọi lại

Vì vậy, tôi có nghe youtube nhiều trên cùng một trang, sử dụng 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); 

đâu Tôi đang sử dụng ruby ​​để tạo ra các đối tượng ytplayer id. Và tôi đang nghe sự kiện onStateChange trong một chức năng khác.

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

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

Nhưng vấn đề là tôi không thể biết sự kiện này đến từ đâu. (tìm nguồn của người gọi trong hàm onytplayerStateChanged) Vì tôi chỉ có thể nắm bắt sự kiện này bằng cách thực hiện chính xác cấu trúc này. Tôi đã thử triển khai trên This one nhưng nó sẽ không bắt sự kiện nữa.

+0

Bạn có thể đặt điều này trong một jsfiddle? Tôi không quen thuộc với API youtube nhưng điều này có vẻ như nó có thể được sửa bằng cách thay đổi phạm vi của bạn. – devnill

+1

có lẽ tôi hiểu sai câu hỏi nhưng có vẻ như bạn cần nhiều trình xử lý sự kiện cho mỗi trình phát uniqe thay vì chỉ có một. –

Trả lời

1

Tôi nghĩ bạn có thể nhúng một Id và sau đó thêm người nghe đến một chức năng động như là đề xuất ở đây: How to display multiple YouTube videos without overlapping audio

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

(...) 

function onytplayerStateChange(newState, playerId) 
Các vấn đề liên quan