【问题标题】:Youtube iFrame API pauseVideo is undefined in UIWebViewYoutube iFrame API pauseVideo 在 UIWebView 中未定义
【发布时间】:2013-12-22 22:32:07
【问题描述】:

我正在为 iPad 开发一个应用程序,其中包含一个或多个嵌入在 UIWebView 中的 youtube 视频。我正在使用 Youtube iframe API。视频显示正常,用户可以正常使用正常控件。但是,我想在发生外部事件时暂停视频。

我试图通过使用带有“player.pauseVideo()”的 stringByEvaluatingJavascripFromString 来做到这一点。但是,经过检查,player.pauseVideo 似乎是未定义的。

奇怪的是,如果我在桌面浏览器 player.pauseVideo 中加载相同的页面,这似乎只是 UIWebView(或可能只是 iOS)中的问题。pauseVideo 工作正常。此外,当我在浏览器中检查播放器对象时,它说它是一个“Y”对象,但在 UIWebView 中它是一个“S”对象,并且它的大多数方法都有混淆的名称。

任何帮助将不胜感激。

更新:我找到了使用player.getIframe().contentDocument.querySelector('video').pause() 的解决方法,但这并不理想。

【问题讨论】:

    标签: javascript ios objective-c uiwebview youtube


    【解决方案1】:

    我也遇到了一些麻烦。在寻找 SO 并重新阅读 YouTube iFrame API 几次之后,我想出暂停加载在 UIWebView 内 iFrame 中的 YouTube 视频的方法。

    我在分页的 UIScrollView 中有许多 UIWebView,所以我有一个方法可以形成要加载到 UIWebView 中的 HTML 字符串:

    NSString *urlString = [NSString stringWithFormat:@"https://www.youtube.com/embed/%@",videoID];
    
    preparedHTML = [NSString stringWithFormat:@"<html><body style='background:none; text-align:center;'><script type='text/javascript' src='http://www.youtube.com/iframe_api'></script><script type='text/javascript'>var player; function onYouTubeIframeAPIReady(){player=new YT.Player('player')}</script><iframe id='player' class='youtube-player' type='text/html' width='%f' height='%f' src='%@?rel=0&showinfo=0&enablejsapi=1' style='text-align:center; border: 6px solid; border-radius:5px; background-color:transparent;' rel=nofollow allowfullscreen></iframe></body></html>", 628.0f, 352.0f, urlString];
    

    您可以忽略preparedHTML 字符串中的样式。重要的方面是:

    • 使用 API 创建“YT.player”对象。有一次,我只有 iFrame 标签中的视频,这阻止了我以后用 JS 引用“播放器”对象。
    • 我在网络上看到了一些示例,其中第一个脚本标记(带有 iframe_api src 标记的那个)被省略了,但我绝对需要它才能使其正常工作。
    • 在 API 脚本的开头创建“播放器”变量。我还看到了一些省略该行的示例。
    • 将 id 标记添加到要在 API 脚本中引用的 iFrame。我差点忘了那部分。
    • 将“enablejsapi=1”添加到 iFrame src 标记的末尾。这让我犹豫了一段时间,因为我最初将它作为 iFrame 标签的一个属性,这对我不起作用/不起作用。

    当我需要暂停视频时,我只需要运行这个:

    [webView stringByEvaluatingJavaScriptFromString:@"player.pauseVideo();"];
    

    我可能在那里做了一些不必要的事情,但这就是最终开始为我工作的事情。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2011-07-14
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多