菜鸟教程小白 发表于 2022-12-12 22:10:47

ios - 在 iOS 中通过嵌入式 youtube iframe 使用共享功能


                                            <p><p>正如标题已经指出的那样,我在 iOS 上使用嵌入式 youtube iframe 播放器时遇到了一些问题。但首先是关于我的问题的背景。我有一组存储在设备上并加载到 WKWebView 中的 HTML 文件。这些文件仅包含简单的文本,有时还包含使用 iframe 语法嵌入的 youtube 视频。</p>

<pre><code>&lt;iframe width=&#34;100%&#34; height=&#34;100%&#34; id=&#34;playerId&#34; type=&#34;text/html&#34; src=&#34;https://www.youtube.com/embed/XXXXXXXX?enablejsapi=0&amp;rel=0&amp;playsinline=0&amp;autoplay=0&#34; frameborder=&#34;0&#34;&gt;
</code></pre>

<p>播放、声音、进入全屏……一切都按预期进行。除了 youtube 播放器的信息部分(右上角的箭头)之外的所有内容。当我按下箭头时,屏幕打开,但选择 url 或其中一个共享选项没有任何效果,只能破坏嵌入的视频。我仍然可以关闭信息部分,但缩略图会消失,并且在我重新加载 HTML 文档之前不会播放。</p>

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

<p>感谢任何提示,</p>

<p>维克多</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,</p>

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

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

<pre><code>func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -&gt; WKWebView? {

    if navigationAction.targetFrame == nil {

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

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

    return nil
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 iOS 中通过嵌入式 youtube iframe 使用共享功能,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/39598991/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/39598991/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 iOS 中通过嵌入式 youtube iframe 使用共享功能