菜鸟教程小白 发表于 2022-12-11 19:07:08

ios - 在 Safari 中打开 Swift 3 UIWebView(视频中的 YouTube Logo /水印超链接)


                                            <p><p><strong>使用 Swift 3 和 UIWebView 如何强制通过网页 IFrame 播放的 YouTube 视频中显示的 YouTubeLogo /水印“超链接”在 Safari 中打开?</strong></p>

<p>我正在使用 UIWebView(目前还不能转换到 WKWebView。)来显示一个在 IFrame 中播放 YouTube 视频的网页。 </p>

<p>按照 <a href="https://developers.google.com/youtube/player_parameters?csw=1#modestbranding" rel="noreferrer noopener nofollow">https://developers.google.com/youtube/player_parameters?csw=1#modestbranding</a> 上的“YouTube 嵌入式播放器和播放器参数”说明进行操作.我可以使用 showinfo=0 从视频顶部删除标题和分享按钮。这只会留下 YouTubeLogo /水印。</p>

<p>当您点击 YouTubeLogo /水印时,它会在我的应用中打开 YouTube,这不利于用户导航体验。</p>

<p><strong>如果用户单击 YouTubeLogo /水印,我需要在 Safari 中打开此链接。</strong>我尝试使用下面显示的代码,但没有成功。该代码适用于 UIWebView 中的所有其他链接,但不适用于嵌入实际视频中的 YouTubeLogo /水印超链接。 </p>

<p>//ViewController.swift</p>

<p>导入 UIKit</p>

<p>类 ViewController: UIViewController, UIWebViewDelegate {</p>

<pre><code>@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
    if let url = URL(string: &#34;http://www.example.com&#34;) {
      let request = URLRequest(url: url)
      webView.loadRequest(request)
    }
}


//Force all links to open in Safari.
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -&gt; Bool {
    if let url = request.url, navigationType == UIWebViewNavigationType.linkClicked {
      UIApplication.shared.openURL(url)
      return false
   }
    return true
}}
</code></pre>

<p>我能够使用 <a href="https://stackoverflow.com/questions/4229494/webview-link-click-open-default-browser" rel="noreferrer noopener nofollow">WebView link click open default browser</a> 中的示例在我的应用程序的 android 版本中实现这一点. </p>

<p>我花了一周的时间试图弄清楚这一点,以免浪费任何人的时间来解决已经回答的问题。 <strong>任何帮助解决这个问题将不胜感激。谢谢!</strong></p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我正在寻找完全相同的解决方案,我想知道是否有人可以帮助解决这个问题</p>

<p>我用下面的代码片段试了一下</p>

<pre><code>func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -&gt; Bool {
    if navigationType == UIWebViewNavigationType.linkClicked {
      guard let abURL = request.url else { return true }
      let abRequest = URLRequest(url: abURL)
      print(abURL)
      print(abRequest)
      if abURL.absoluteString.range(of: &#34;youtube&#34;) != nil {
            // Open links in Safari
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(abURL, options: [:], completionHandler: nil)
            } else {
                UIApplication.shared.openURL(abURL)
            }
      } else {
            // Open links in Webview
            webView.loadRequest(abRequest)
      }
      return false
    }
    return true
}
</code></pre>

<p>在第 5/6 行,如果点击链接,我会打印 url,当我点击视频中的 Youtube 水印(包含在 iframe 中)时,我没有打印出该 url,所以我的猜测是 swift不“知道”链接被点击。所有其他链接都在工作并打印网址。</p>

<p>我还包含了一个 iframe,其中只有一个指向 youtube 的链接</p>

<pre><code>&lt;a href=&#34;https://youtube.com&#34;&gt;Youtube Link&lt;/a&gt;
</code></pre>

<p>这个链接有效,我可以打印网址并在 safari 中打开,所以问题一定出在 youtube 嵌入容器内的链接</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 Safari 中打开 Swift 3 UIWebView(视频中的 YouTubeLogo /水印超链接),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/42516744/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/42516744/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 Safari 中打开 Swift 3 UIWebView(视频中的 YouTube Logo /水印超链接)