使用Swift 3和UIWebView如何强制通过网页IFrame播放的YouTube视频中显示的YouTube徽标/水印“超链接”在Safari中打开?
我正在使用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 link click open default browser中的示例在我的应用的Android版本中实现此目的。
我花了一个星期的时间试图解决这个问题,以免浪费任何时间来解决已经回答过的问题。 任何帮助解决这个问题将不胜感激。谢谢!
答案 0 :(得分:0)
我正在寻找完全相同的解决方案,我想知道是否有人可以帮助解决这个问题
我尝试使用以下代码段
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中)时,我没有得到该网址的打印,所以我的猜测就是那个swift不“知道”点击链接。所有其他链接正在工作并打印网址。
我还添加了一个iframe,其中只包含指向youtube的链接
<a href="https://youtube.com">Youtube Link</a>
并且此链接有效,我可以打印网址并在safari中打开,因此问题必须是youtube嵌入容器内的链接
答案 1 :(得分:0)
尝试UIWebViewNavigationType.other
来捕获由linkClicked插入的youtube.com/watch网址:
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
}}