我正在为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字符串中的样式设置。重要方面是:
  • 使用API​​创建“YT.player”对象。有一次,我只将视频包含在iFrame标记中,这使我以后无法使用JS引用“玩家”对象。
  • 我在网上看到了一些示例,其中第一个脚本标签(带有iframe_api src标签的脚本标签)被省略了,但是我确实需要这样做才能使它工作。
  • 在API脚本的开头创建“player”变量。我还看到了一些省略了该行的示例。
  • 将ID标记添加到要在API脚本中引用的iFrame。我差点忘了那部分。
  • 在iFrame src标记的末尾添加“enablejsapi = 1”。这让我挂了一段时间,因为我最初将其作为iFrame标记的属性,该标记对我不起作用/不起作用。

  • 当我需要暂停视频时,只需运行以下命令:
    [webView stringByEvaluatingJavaScriptFromString:@"player.pauseVideo();"];
    

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

    关于javascript - UIWebView中未定义Youtube iFrame API pauseVideo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20409239/

    10-11 03:01
    查看更多