使用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
}}