由于标题已经说明我在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目标的链接,但我不确定。无论如何都无法改变这些。
感谢任何提示,
维克多
答案 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
}