在UIWebView中未定义Youtube iFrame API pauseVideo

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

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

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

任何帮助,将不胜感激。

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

我也遇到了一些麻烦。 在搜索SO并重新阅读YouTube iFrame API几次之后,我就想到了暂停在UIWebView中加载到iFrame中的YouTubevideo。

我在一个分页的UIScrollView中有很多UIWebView,所以我有一个方法,我在UIWebView中加载一个HTML字符串:

 NSString *urlString = [NSString stringWithFormat:@"https://www.youtube.com/embed/%@",videoID]; preparedHTML = [NSString stringWithFormat:@"", 628.0f, 352.0f, urlString]; 

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

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

当我需要暂停video时,我只需运行:

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

我可能在那里做了一些不必要的事情,但这才是最终开始为我工作的东西。 希望能帮助到你!