Swift 3 Uiwebview Open(视频中的YouTube徽标/水印超链接)在Safari中



使用swift 3和uiwebview我如何强制YouTube徽标/水印"超链接",该"超链接"通过网页iframe播放在safari中打开的YouTube视频中?

我正在使用uiwebview(尚未过渡到WKWebView。)以显示在IFRAME中播放YouTube视频的网页。

按照https://developers.google.com/youtube/player_parameters?csw = 1#modestbranding的" YouTube嵌入式玩家和玩家参数"指令。我能够使用ShowInfo = 0从视频顶部删除标题和共享按钮。这只留下YouTube徽标/水印。

单击YouTube徽标/水印时,它会在我的应用程序内打开YouTube,这对用户导航体验不利。

如果用户单击YouTube徽标/水印,我需要此链接才能在Safari中打开。我尝试使用下面显示的代码而没有成功。该代码可在UIWebView中的其他链接上工作,但在实际视频中嵌入的YouTube徽标/水印超链接上不起作用。

//viewcontroller.swift

导入Uikit

类ViewController:uiviewController,uiwebviewdelegate {

@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
    if let url = URL(string: "http://www.example.com") {
        let request = URLRequest(url: url)
        webView.loadRequest(request)
    }
}

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

我能够在WebView链接上使用示例单击"打开默认浏览器"在我的应用程序的Android版本中实现此目标。

我花了一个星期的时间试图解决这个问题,以免浪费任何时间来解决一个已经回答的问题。弄清楚这一点的任何帮助将不胜感激。谢谢!

我正在寻找完全相同的解决方案,我想知道是否有人可以在此方面提供帮助

我使用以下代码段

尝试了一下
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> 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: "youtube") != 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
}

在第5/6行上,如果单击链接,当我单击视频中的youtube水印(包括作为iframe)时,我打印了URL不"知道"单击链接。所有其他链接都在工作和打印URL。

我还包括一个只有指向youtube的链接的iframe

<a href="https://youtube.com">Youtube Link</a>

此链接有效,我可以打印URL并在Safari中打开,因此问题必须与YouTube嵌入式容器内的链接有关

尝试 UIWebViewNavigationType.other catch youtube.com/watch linkclicked设置:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if let url = request.url, navigationType == UIWebViewNavigationType.other {
        // catch "youtube.com/watch" and let safari to open link
        return false
   }
    return true
}}

最新更新