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