ios - 在 iOS 中使用嵌入式 YouTube iframe 的共享功能

标签 ios iframe youtube ios9 embed

正如标题所示,我在 iOS 上的嵌入式 YouTube iframe 播放器方面遇到了一些问题。但首先介绍一下我的问题的背景。我有一组 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 播放器的信息部分(右上角的箭头)之外的所有内容。当我按箭头时,屏幕会打开,但选择 URL 或共享选项之一没有任何效果,只会破坏嵌入的视频。我仍然可以关闭信息部分,但缩略图会消失,并且在重新加载 HTML 文档之前不会播放。

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

感谢您的任何提示,

维克多

最佳答案

好的,

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

我现在所做的是实现委托(delegate),检查 navigationActions targetFrame 是否为零(这意味着它指向一个新窗口),然后在 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
}

关于ios - 在 iOS 中使用嵌入式 YouTube iframe 的共享功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598991/

相关文章:

javascript - 从同级框架中定位包含 iframe 的框架

youtube - 包含空格的用户的YouTube GDATA播放列表供稿

youtube - 什么对我来说更有利可图?要将我的想法发布到博客或YouTube上?

ios - 如何以模态方式呈现透明的 UINavigationController + root?

ios - Storyboard在窗口上添加一个按钮

iOS 卓悦 : didFindService but failed to resolve in public Wi-Fi network

javascript - 我无法使用 jquery 隐藏点击事件上的 div

javascript - 调整 iframe 的宽度和高度以适应其中的内容

javascript - Youtube Iframe API - 检测播放列表的结尾

ios - 自定义 map 样式 Google Map/MapKit