【问题标题】:Why is this if statement in my event handler not working on iOS?为什么我的事件处理程序中的 if 语句在 iOS 上不起作用?
【发布时间】:2014-09-18 20:14:14
【问题描述】:

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

知道为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 哪个'if'不起作用?很难在 iOS 设备上检查 javascript。所以你可以在catch中添加try catch块并调用alert来检测是否有一些js错误。

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


【解决方案1】:

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

【讨论】:

  • 到这段代码运行时,用户已经直接点击播放并开始播放,所以它应该可以工作。我不明白的是,在那个 IF 语句中,即使我只是尝试登录到控制台,它也不能在 iOS 上运行。
【解决方案2】:

原来的问题是,当用户直接在视频 iframe 本身上按下播放(iOS 上需要)时,我没有设置 App.nowPlaying,而且很明显,IF 语句永远不会为真。我只需要确保设置 App.nowPlaying,并且在 iPad 上一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多