我正在为 iPad 开发一个应用程序,其中包含嵌入在 UIWebView 中的一个或多个 youtube 视频。我正在使用 Youtube iframe API。视频显示正常,用户可以正常使用正常控件。但是,我想在发生外部事件时暂停视频。
我试图通过将 stringByEvaluatingJavascripFromString 与“player.pauseVideo()”结合使用来实现这一点。但是,经检查,player.pauseVideo 似乎未定义。
奇怪的是,如果我在桌面浏览器 player.pauseVideo 中加载相同的页面,这似乎只是 UIWebView(或可能只是 iOS)中的问题。pauseVideo 工作正常。此外,当我在浏览器中检查播放器对象时,它说它是一个“Y”对象,但在 UIWebView 中它是一个“S”对象,并且它的大多数方法都有混淆的名称。
如有任何帮助,我们将不胜感激。
更新:我找到了一个使用 player.getIframe().contentDocument.querySelector('video').pause() 的解决方法,但这并不理想。
最佳答案
我也遇到了一些麻烦。在搜索 SO 并重新阅读 YouTube iFrame API 几次之后,我想到了在 UIWebView 中暂停加载到 iFrame 中的 YouTube 视频。
我在一个分页的 UIScrollView 中有许多 UIWebView,所以我有一个方法可以形成一个 HTML 字符串以加载到 UIWebView 中:
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];
您可以忽略准备好的 HTML 字符串中的样式内容。重要的方面是:
当我需要暂停视频时,我只需运行这个:
[webView stringByEvaluatingJavaScriptFromString:@"player.pauseVideo();"];
我可能在那里做了一些不必要的事情,但这是最终开始为我工作的事情。希望对您有所帮助!
关于javascript - Youtube iFrame API pauseVideo 在 UIWebView 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20409239/