在iOS中使用嵌入式youtube iframe的共享功能

时间:2016-09-20 16:09:35

标签: ios iframe youtube ios9 embed

由于标题已经说明我在iOS上嵌入了youtube iframe-player时遇到了一些问题。但首先要谈谈我的问题的背景。我有一组HTML文件存储在设备上并加载到WKWebView中。这些文件仅包含简单文本,有时还包含使用iframe语法嵌入的YouTube视频。

<iframe width="100%" height="100%" id="playerId" type="text/html" src="https://www.youtube.com/embed/XXXXXXXX?enablejsapi=0&rel=0&playsinline=0&autoplay=0" frameborder="0">

播放,声音,进入全屏......一切都按预期工作。除了youtube-player的信息部分(右上角的箭头)之外的所有内容。当我按下箭头时,屏幕会打开,但是选择网址或其中一个共享选项对打破嵌入的视频无效。我仍然可以关闭信息部分,但缩略图会消失,在我重新加载HTML文档之前它不会播放。

现在我的猜测是WKWebView沙箱中有安全设置阻止我加载任何嵌入式链接。我想我记得WebView不允许在iframe中使用_blank目标的链接,但我不确定。无论如何都无法改变这些。

感谢任何提示,

维克多

1 个答案:

答案 0 :(得分:2)

行,

我自己设法(至少部分地)解决了这个问题。我查看了WKWebView及其Delegates的标题,并发现了一条评论,提到了打开与_blank目标的链接时的WebViews行为。由于WebView无法打开一个新窗口(这是空白强制执行的),它将调用其UIDelegate请求新的WKWebView实例打开“新窗口”链接(另请参阅https://developer.apple.com/reference/webkit/wkuidelegate/1536907-webview)。

我现在做的是实现委托,检查navigationActions targetFrame是否为nil(这意味着它指向一个新窗口)并在Safari中打开链接。不幸的是,这种链接处理总是打破了播放器,因此我还必须触发我的嵌入式Web内容的重新加载,以便将播放器“重置”回其初始状态。关于在返回应用程序时恢复播放有点不幸,但它比根本无法播放视频更好。

func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {

    if navigationAction.targetFrame == nil { 

        guard let requestURL = navigationAction.request.URL
            else { return nil }

        UIApplication.sharedApplication().openURL(requestURL)
        webView.reload()
    }

    return nil
}