2017-05-29 18 views
0

我正在使用Youtube Iframe Javascript API處理應用程序。我必須根據來自其他應用程序的輸入播放或暫停視頻(稱爲調用應用程序)。我也必須從這個Youtube播放器(無論是播放還是暫停)更新並更新調用應用程序。如何區分由代碼和用戶調用的動作偵聽器?

現在的問題是如何區分用戶操作或基於來自Calling應用程序的輸入播放管樂器。因爲他們都調用動作偵聽器。當由調用應用程序播放時,我不希望調用應用程序再次更新。

例如:

案例1:

  1. 調用應用程序發送播放請求YouTube播放器。
  2. Youtube播放器正在播放。
  3. onStateChange偵聽器被調用。
  4. 調用應用程序會收到玩家狀態已更改的通知。 (我不希望發生這種情況)。

案例2:

  1. 用戶點擊播放播放器上的按鈕。
  2. Youtube播放器正在播放。
  3. onStateChange偵聽器被調用。
  4. 調用應用程序會收到玩家狀態已更改的通知。 (我希望這發生)。

我可以當程序調用它與開關變量做到這一點,當用戶調用它禁用它。但是這種情況太多了,我不能指望所有的開發人員在考慮所有這些情況時處理它。

所以我需要一個正確的方式讓動作偵聽器知道用戶是否調用了該動作或程序是否調用了該動作。在API中是否有內置的方法來執行此操作?

function callback(responseText) { 
    var response=JSON.parse(responseText.body); 
    var player = getPlayer(); 
    var seekAhead = true; 
    switch (response.playerState) { 
    case YT.PlayerState.PLAYING: 
     player.seekTo(response.seconds,seekAhead); 
     player.playVideo(); 
     break; 
    case YT.PlayerState.PAUSED: 
     player.seekTo(response.seconds,seekAhead); 
     player.pauseVideo(); 
     break; 
    case YT.PlayerState.BUFFERING: 
     break; 
    case YT.PlayerState.ENDED: 
       break; 
    } 

使用一個變量來管理交換機的問題是,當主叫應用程序發送一個播放狀態,有一個呼叫seekTo它調用暫停,緩衝劑和玩事件。他們需要一段時間才能完成,但可變開關在第一個事件中切換。

+0

你的代碼在哪裏? 「*呼叫應用程序向YouTube播放器*發送播放請求」是如何實現的? – RobG

+0

調用應用程序發送一個json。它包含需要應用於玩家的玩家狀態。我會更新代碼。 –

回答

0

嗯。對於情況2註冊事件加載器推送一些數據。而對於案例1的註冊,在「調用應用程序」註冊相同的回調,但不發送額外的數據。

// In calling application: 
$('selector').on('click', cb) 


// For case 2: 
$('selector').on('click', {userAction: true}, cb) 


function cb (evt) { 
    if (evt.data.userAction) { 
    // react here 
    // this reaction will be not 
    // executed if 
    } 
} 
+0

我沒有看到jQuery標籤。 OP使用* StateChange *事件,而不是*點擊*。 – RobG

+0

@Waldemarlce調用還有一個問題。我以編程方式在播放器上調用seekTo,動作監聽器被調用三次,每次暫停,緩衝和播放。在這種情況下,我無法通過由調用應用程序調用的單個操作的API按順序調用附加數據。 –

+0

但它似乎沒有解決方案... – WaldemarIce

相關問題