停止导航 WKWebview

Posted

技术标签:

【中文标题】停止导航 WKWebview【英文标题】:Stop navigation WKWebview 【发布时间】:2019-05-30 06:41:57 【问题描述】:

这是我的情况:

我在 WKWebView 中有一个视图控制器。此 web 视图以页面“A”开始。在此页面中有一些链接 (href),我希望其中一些链接必须在外部浏览器中打开。

出于这个原因,我设置了 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

我的问题是,如果我选择外部链接,外部浏览器会打开,但 webview 不会保留在页面 A 上,但它也会加载外部链接,而我希望它保留在页面 A 上。

不知道为什么

【问题讨论】:

【参考方案1】:

您应该使用navigationAction.request.url 而不是webView.url

webView.url - 已经加载的网址 navigationAction.request.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)
    

【讨论】:

多次获取相同的url,第一次获取url后如何取消req thsi 函数多次调用我该如何处理这个【参考方案2】:

你可以尝试使用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的主要内容,如果未能解决你的问题,请参考以下文章

停止导航控制器swift的导航

停止导航栏与表格一起滚动

停止导航 WKWebview

使用 navhost 在底部导航中停止片段刷新

是否可以停止隐藏导航栏?

iOS - 在导航更改时停止视频