停止导航 WKWebview
Stop navigation WKWebview
这是我的情况:
我在 WKWebView 中有一个视图控制器。此网络视图以页面 "A" 开头。在此页面中有一些 links (href),我希望其中一些 links 必须在外部浏览器中打开。
出于这个原因,我设置了 WKWebView 委托:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = webView.url?.absoluteString
{
if(self.isExternalURL(url))
{
let urlT = URL(string: url)!
decisionHandler(.cancel)
UIApplication.shared.open(urlT, options: [:], completionHandler: nil)
}
else
{
decisionHandler(.allow)
}
}
else
{
decisionHandler(.allow)
}
}
private func isExternalURL(url:String) -> Bool
{
//......check link
}
我的问题是,如果我 select 外部 link 外部浏览器打开,但 webview 不会保留在页面 A 上,但它也会加载外部 link 同时我希望它保留在页面 A 上。
不知道为什么
您应该使用 navigationAction.request.url
而不是 webView.url
webView.url
- 已加载 url
navigationAction.request.url
- 新 url 加载
改变
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url?.absoluteString
{
if self.isExternalURL(url)
{
decisionHandler(.cancel)
UIApplication.shared.open(navigationAction.request.url, options: [:], completionHandler: nil)
}
else
{
decisionHandler(.allow)
}
}
else
{
decisionHandler(.allow)
}
}
你可以尝试使用webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
if let url = navigationAction.request.url?.absoluteString
{
if self.isExternalURL(url)
{
webView.stopLoading()
UIApplication.shared.open(navigationAction.request.url, options: [:], completionHandler: nil)
}
}
}
这是我的情况:
我在 WKWebView 中有一个视图控制器。此网络视图以页面 "A" 开头。在此页面中有一些 links (href),我希望其中一些 links 必须在外部浏览器中打开。
出于这个原因,我设置了 WKWebView 委托:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = webView.url?.absoluteString
{
if(self.isExternalURL(url))
{
let urlT = URL(string: url)!
decisionHandler(.cancel)
UIApplication.shared.open(urlT, options: [:], completionHandler: nil)
}
else
{
decisionHandler(.allow)
}
}
else
{
decisionHandler(.allow)
}
}
private func isExternalURL(url:String) -> Bool
{
//......check link
}
我的问题是,如果我 select 外部 link 外部浏览器打开,但 webview 不会保留在页面 A 上,但它也会加载外部 link 同时我希望它保留在页面 A 上。
不知道为什么
您应该使用 navigationAction.request.url
而不是 webView.url
webView.url
- 已加载 urlnavigationAction.request.url
- 新 url 加载
改变
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url?.absoluteString
{
if self.isExternalURL(url)
{
decisionHandler(.cancel)
UIApplication.shared.open(navigationAction.request.url, options: [:], completionHandler: nil)
}
else
{
decisionHandler(.allow)
}
}
else
{
decisionHandler(.allow)
}
}
你可以尝试使用webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
if let url = navigationAction.request.url?.absoluteString
{
if self.isExternalURL(url)
{
webView.stopLoading()
UIApplication.shared.open(navigationAction.request.url, options: [:], completionHandler: nil)
}
}
}