【问题标题】:Using share functionality with embedded youtube iframe in iOS在 iOS 中通过嵌入式 youtube iframe 使用共享功能
【发布时间】:2017-01-28 16:01:02
【问题描述】:

正如标题已经指出的那样,我在 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 目标的链接,但我不确定。无论如何都无法更改。

感谢任何提示,

维克多

【问题讨论】:

    标签: ios iframe youtube ios9 embed


    【解决方案1】:

    好的,

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

    我现在做的是实现委托,检查 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 2014-10-30
      • 1970-01-01
      • 2020-01-26
      • 2015-10-08
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多