objective-c - UIWebView 中的 YouTube 只播放一次

标签 objective-c ios uiwebview youtube

我有一个 UIWebView,其中通过 iframe 代码嵌入了一些 YouTube 视频:

<iframe width="190" height="102" src="http://www.youtube.com/embed/...?showinfo=0" frameborder="0" allowfullscreen></iframe>

首次加载时,每个视频只能观看一次。查看后,该区域只是黑色,里面有白色的“Youtube”。

有什么想法吗?当然,在观看视频后重新加载 UIWebView 可以修复它,但我不喜欢这样......

最佳答案

我做到了!以下 Javascript 完成了这项工作:

<script>
 VideoIDs = new Array(...some ids here...);

 function getFrameID(id){
  var elem = document.getElementById(id);
  if (elem) {
   if(/^iframe$/i.test(elem.tagName))
    return id;
   var elems = elem.getElementsByTagName("iframe");
   if (!elems.length)
    return null;
   for (var i=0; i<elems.length; i++) {
    if (/^https?:\/\/(?:www\.)?youtube(?:-nocookie)?\.com(\/|$)/i.test(elems[i].src))
     break;
   }
   elem = elems[i];
   if (elem.id)
    return elem.id;
   do {
    id += "-frame";
   } while (document.getElementById(id));
   elem.id = id;
   return id;
  }
  return null;
 }

 var YT_ready = (function(){
  var onReady_funcs = [], api_isReady = false;
  return function(func, b_before){
   if (func === true) {
    api_isReady = true;
    for (var i=0; i<onReady_funcs.length; i++){
     onReady_funcs.shift()();
    }
   } else if(typeof func == "function") {
    if (api_isReady)
     func();
    else
     onReady_funcs[b_before?"unshift":"push"](func);
   }
  }
 })();

 function onYouTubePlayerAPIReady() {
  YT_ready(true)
 }

 (function(){
  var s = document.createElement("script");
  s.src = "http://www.youtube.com/player_api";
  var before = document.getElementsByTagName("script")[0];
  before.parentNode.insertBefore(s, before);
 })();

 var players = new Array();
 YT_ready(function() {
  for(index in VideoIDs) {
   var frameID = getFrameID(VideoIDs[index]);
   if (frameID) {
    players[frameID] = new YT.Player(frameID, {
     events: {
      "onStateChange": stateChange
     }
    });
   }
  }
 });

 function youtube_parser(url){
  var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
  var match = url.match(regExp);
  if (match&&match[7].length==11){
   return match[7];
  }
 }

 function stateChange(event) {
  if(event.data == YT.PlayerState.ENDED){
   document.location = 'callback:finished';
   document.getElementById(youtube_parser(event.target.getVideoUrl())).contentWindow.location.reload(true);
  }
 }
 </script>

关于objective-c - UIWebView 中的 YouTube 只播放一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479292/

相关文章:

ios - AppDelegate (iOS) 中的“使用未声明的标识符”

objective-c - IOS 与 DB 在线身份验证

ios - 变量不存储给它的东西 - Swift 3

iphone - KissXML 和 GData 已弃用?

ios - 以编程方式获取 iOS7 的 IMEI

iphone - 如何使用 UIWebView 下载视频

iphone - 将 UIWebView-heavy iPhone 应用程序移植到 Mac

iphone - 核心显卡 CGContextSetFillColorWithColor 未填充我的形状

ios - 使用文件管理器迭代目录占用大量内存

javascript - 特定的 UIWebView 选择(仅整个单词/句子)