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

标签 ios swift youtube uiwebview

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

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

按照 https://developers.google.com/youtube/player_parameters?csw=1#modestbranding 上的“YouTube 嵌入式播放器和播放器参数”说明进行操作.我能够使用 showinfo=0 从视频顶部删除标题和共享按钮。这只会留下 YouTube Logo /水印。

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

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

//ViewController.swift

导入 UIKit

类 View Controller :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 link click open default browser 中的示例在我的应用程序的 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 行,如果单击链接,我会打印 url,当我单击视频中的 Youtube 水印(作为 iframe 包含在内)时,我没有打印该 url,所以我的猜测是很快不“知道”链接被点击。所有其他链接都在工作并打印 url。

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

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

这个链接有效,我可以打印 url 并在 safari 中打开,所以问题一定出在 youtube 嵌入容器内的链接

关于ios - Swift 3 UIWebView 在 Safari 中打开(视频中的 YouTube Logo /水印超链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516744/

相关文章:

java - 在Android Webview中自动播放Youtube

iOS - 从表格单元格全屏播放 YouTube 视频

ios - 设置 MPNowPlayingInfoCenter 与其他背景音频播放

ios - 如何在Objective-C中播放Lottie动画

ios - 如何从 NSURLSessionTask 禁用缓存

ios - 如何选择合适的 UIGestureRecognizer?

ios - 在 Swift 中显示 MKAnnotationView 的公开指示器标注

android - 适用于Android设备的视频库

ios - Oauth1 iOS 从 API 获取数据

ios - Swift 2.0 错误从 '[NSIndexPath]?' 向下转换为 '[indexpath]' 仅解包可选