为什么我的事件处理程序中的if语句不能在iOS上运行?

时间:2014-09-18 20:14:15

标签: javascript ios backbone.js marionette youtube-javascript-api

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

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;
          });
        }
      }
    }
  });
},

知道为什么会发生这种情况,以及如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

大多数移动设备只允许用户通过直接,物理和同步互动播放音频/视频(例如onclickontouchstart等)。您在尝试播放视频之前等待异步nextVideo.fetch()承诺解决,从而违反此规则。您应该可以通过要求用户点击某些内容来启动下一个视频来解决此问题,或者您可以尝试同步nextVideo.fetch()来电。

答案 1 :(得分:0)

原来问题是,当用户直接在视频iframe上按下播放时(在iOS上是必需的),我没有设置App.nowPlaying,因此很明显IF语句永远不会成立。我只需要确保设置App.nowPlaying,并且iPad上的游戏工作正常。