0

我的Backbone应用程序中有一个事件处理程序,用于侦听YouTube视频何时结束,然后查找下一个视频并播放它。它在桌面上完美运行,但不适用于iOS。它识别事件并触发处理程序,但是由于某种原因,我的if语句不起作用。为什么这个if语句在我的事件处理程序中不能在iOS上工作?

App.Player.addEventListener('onStateChange', function(newState){ 
    // Play/Pause functionality 
    var currentSong = App.Player.getVideoData(); 
    if (theVideoId == currentSong.video_id){ 
     if (newState.data == 1){ 
     $("#play-pause").addClass("playing") 
     } else if (newState.data == 2){ 
     $("#play-pause").removeClass("playing") 
     } 
    }; 

    // When song ends, play the next song in playlist 
    if (newState.data == 0){ 
     for (var i=0; i < App.playList.size(); i++){ 
     if (App.playList.models[i].get("id") == App.nowPlaying.get("id")){ 
      // none of this code executes on iOS, but works fine on desktop 
      var nextVideo = App.playList.models[i+1]; 
      var promise = nextVideo.fetch(); 
      $.when(promise).then(function(){ 
      App.Player.cueVideoById(nextVideo.get("video")).playVideo();; 
      App.nowPlaying = nextVideo; 
      }); 
     } 
     } 
    } 
    }); 
}, 

任何想法为什么会发生这种情况,以及我如何解决它?

+0

'if'哪个不行?很难检查iOS设备上的JavaScript。因此,您可以添加try catch块并在catch中调用alert以检测是否存在某些js错误。 – aleha 2014-09-18 20:25:46

回答

0

原来问题是,当用户直接按下播放视频iframe本身(这是iOS所需的),我没有设置App.nowPlaying,并且很清楚IF语句永远不会是真的。我只需要确保设置App.nowPlaying,并且iPad在iPad上游泳。

0

大多数移动设备将只允许用户通过直接,物理和同步交互来回放音频/视频(例如onclick,ontouchstart等)。在尝试播放视频之前,您正在等待您的异步解决方案违反此规则。您应该能够通过要求用户点击某些内容来开始下一个视频来解决此问题,或者您可以尝试使您的呼叫同步。

+0

当这段代码运行时,用户已经直接点击播放并开始播放,所以它应该可以工作。我不明白的是,在IF语句中,即使我只是尝试登录到控制台,它也不会在iOS上运行。 – Batesy 2014-09-19 13:44:04

相关问题