如何在 uiwebview iOS 中处理 YouTube 视频事件(开始、结束等)

Posted

技术标签:

【中文标题】如何在 uiwebview iOS 中处理 YouTube 视频事件(开始、结束等)【英文标题】:How to handle YouTube video events (started, finished, etc) in uiwebview iOS 【发布时间】:2011-08-22 21:49:39 【问题描述】:

目前,我正在使用新的 iframe API 在 iPad 上的 uiwebview 中嵌入 YouTube 视频,并且无需用户交互即可使其自动播放。 在 iframe API 中描述了如何使用 onstatechange 事件,但在我的应用程序中它似乎不起作用,不幸的是我在 uiwebview 中看不到任何调试。

我只想能够检测到视频何时结束,你有什么建议吗? 有人让它工作吗?

【问题讨论】:

【参考方案1】:

您是否尝试过(从文档中)为电影结束的事件分配一个整数?:

onStateChange 只要玩家的状态发生变化,就会触发此事件。 API 传递给您的事件对象的数据属性 事件侦听器函数将指定一个整数,对应于 新玩家状态。可能的数据值为:

-1 (unstarted)
0 (ended)
1 (playing)
2 (paused)
3 (buffering)
5 (video cued).

当播放器第一次加载视频时,它会播放一个未启动的视频 (-1) 事件。当视频被提示并准备好播放时,播放器将 广播视频提示 (5) 事件。在您的代码中,您可以指定 整数值,或者您可以使用以下命名空间之一 变量:

YT.PlayerState.ENDED
YT.PlayerState.PLAYING
YT.PlayerState.PAUSED
YT.PlayerState.BUFFERING
YT.PlayerState.CUED

所以,类似:

if(event.data==YT.PlayerState.ENDED) 
//do stuff here
                

【讨论】:

【参考方案2】:

要检测视频何时结束,则视频的状态为 0 或 YT.PlayerState.ENDED

这是 jsfiddle a link 的链接!

<!DOCTYPE html>
<html>

  <head>
    <meta charset="UTF-8">
    <title>Page 1</title>
  </head>

  <body>

    <h1>Video page</h1>
    <br>


    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
    <div id="player"></div>

    <script>
      // 2. This code loads the IFrame Player API code asynchronously.
      var tag = document.createElement('script');

      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

      // 3. This function creates an <iframe> (and YouTube player)
      //    after the API code downloads.
      var player;

      function onYouTubeIframeAPIReady() 
        player = new YT.Player('player', 
          height: '390',
          width: '640',
          videoId: 'ussCHoQttyQ',
          playerVars: 
            'autoplay': 0,
            'controls': 0,
            'showinfo': 0,
            'rel': 0
          ,
          events: 
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
          
        );
      

      // 4. The API will call this function when the video player is ready.
      function onPlayerReady(event) 
        event.target.playVideo();
      

      // 5. The API calls this function when the player's state changes.
      // The function indicates that when playing a video (state=1),
      // -1 unstarted 
      // 0 ended 
      // 1 playing
      // 2 paused
      // 3 buffering
      // 5 video cued
      var done = false;

      function onPlayerStateChange(event) 
        console.log(event);
        if (event.data == YT.PlayerState.ENDED) 
          alert(1);
        
      

    </script>




  </body>

</html>

【讨论】:

【参考方案3】:

希望这个http://code.google.com/apis/youtube/js_api_reference.html#SubscribingEvents可以帮助你

【讨论】:

【参考方案4】:

它可能与浏览器中的自动播放策略相关(在移动浏览器中默认禁用)。

如果您的浏览器是 chrome,您可以使用额外的命令行标志 --autoplay-policy=no-user-gesture-required 启动它 - 它对我有用。

【讨论】:

【参考方案5】:

您需要为此使用 javascript

参考此链接:https://developers.google.com/youtube/js_api_reference

【讨论】:

以上是关于如何在 uiwebview iOS 中处理 YouTube 视频事件(开始、结束等)的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIWebView Javascript - 插入数据 - 接收回调?

如何在 ios 中获取 UIWebview 中的内容

在iOS 8中如何在UIWebView Player中接收全屏模式的通知?

如何在 UIWebView 加载的 iframe 中注入 javascript - iOS

UIWebview 如何在 iOS 中进行渲染?

如何在 iOS 中将 javascript 附加到 UIWebView 中?