使用 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
类 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 版本中实现这一点.
我花了一周的时间试图弄清楚这一点,以免浪费任何人的时间来解决已经回答的问题。 任何帮助解决这个问题将不胜感激。谢谢!
Best Answer-推荐答案 strong>
我正在寻找完全相同的解决方案,我想知道是否有人可以帮助解决这个问题
我用下面的代码片段试了一下
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,所以我的猜测是 swift不“知道”链接被点击。所有其他链接都在工作并打印网址。
我还包含了一个 iframe,其中只有一个指向 youtube 的链接
<a href="https://youtube.com">Youtube Link</a>
这个链接有效,我可以打印网址并在 safari 中打开,所以问题一定出在 youtube 嵌入容器内的链接
关于ios - 在 Safari 中打开 Swift 3 UIWebView(视频中的 YouTube Logo /水印超链接),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/42516744/
|