Youtube iFrame API pauseVideo 在 UIWebView 中未定义

Posted

技术标签:

【中文标题】Youtube iFrame API pauseVideo 在 UIWebView 中未定义【英文标题】:Youtube iFrame API pauseVideo is undefined in 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() 的解决方法,但这并不理想。

【问题讨论】:

【参考方案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();"];

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

【讨论】:

以上是关于Youtube iFrame API pauseVideo 在 UIWebView 中未定义的主要内容,如果未能解决你的问题,请参考以下文章

动态创建的 iFrame 上的 YouTube iFrame API

如何启动和停止使用youtube iframe API创建的YouTube视频?

无法通过 api 调用 pauseVideo 访问 youtube 嵌入式 iframe

YouTube API - iframe onStateChange 事件

如何在现有iframe上使用YouTube API?

需要使用 iFrame API 隐藏 YouTube 品牌