OGeek|极客世界-中国程序员成长平台

标题: ios - 在 iOS 中通过嵌入式 youtube iframe 使用共享功能 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 22:10
标题: ios - 在 iOS 中通过嵌入式 youtube iframe 使用共享功能

正如标题已经指出的那样,我在 iOS 上使用嵌入式 youtube iframe 播放器时遇到了一些问题。但首先是关于我的问题的背景。我有一组存储在设备上并加载到 WKWebView 中的 HTML 文件。这些文件仅包含简单的文本,有时还包含使用 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 目标的链接,但我不确定。无论如何都无法更改。

感谢任何提示,

维克多



Best Answer-推荐答案


好的,

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

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

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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4