Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift navigationAction.navigationType linkactivated未检测到相对URL_Ios_Swift_Wkwebview - Fatal编程技术网

Ios swift navigationAction.navigationType linkactivated未检测到相对URL

Ios swift navigationAction.navigationType linkactivated未检测到相对URL,ios,swift,wkwebview,Ios,Swift,Wkwebview,在WKWebView中,我注意到当我点击绝对url时,navigationType是.linkActivated,然而当我点击相对url时,navigationType是。other 每次点击新链接时,我的应用程序都会显示一个新的视图,因此我在webView(\uwebview:WKWebView,decisionpolicyfornavigationAction:WKNavigationAction,decisionHandler:@escaping(WKNavigationActionPol

在WKWebView中,我注意到当我点击绝对url时,
navigationType
.linkActivated
,然而当我点击相对url时,
navigationType
。other

每次点击新链接时,我的应用程序都会显示一个新的视图,因此我在
webView(\uwebview:WKWebView,decisionpolicyfornavigationAction:WKNavigationAction,decisionHandler:@escaping(WKNavigationActionPolicy)
中有处理这个问题的逻辑

它适用于绝对url,因为我可以检查
.linkActivated
,但不适用于相对url,因为我不确定如何区分点击相对url与其他请求

下面是一个代码示例

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if self.delegate?.getCurrentViewState() != ViewState.Feed {

        if navigationAction.navigationType == .linkActivated {
            // apply logic to navigate to a new view
        }
        else if navigationAction.navigationType == .other {
            // somehow understand that this request is coming from relative url and apply same logic as above
        }

    }
    decisionHandler(.allow)
}

你们中的任何人都知道是否有办法检测我正在处理的请求是否来自相对url点击?

您可以尝试以下解决方案:

// MARK: - WKNavigationDelegate
extension NaviWebViewController {
    override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        switch navigationAction.navigationType {
        case .linkActivated:
            linkActivated(webView: webView, navigationAction: navigationAction, decisionHandler: decisionHandler)
        default:
            otherAction(webView: webView, navigationAction: navigationAction, decisionHandler: decisionHandler)
        }
    }

    func linkActivated(webView: WKWebView, navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        guard let url = navigationAction.request.url else {
            decisionHandler(.cancel)
            return
        }
    
        guard allowLoadURL(url: url) else {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            decisionHandler(.cancel)
            return
        }
    
        decisionHandler(.allow)
    }

    func otherAction(webView: WKWebView, navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        guard let isMainFrame = navigationAction.targetFrame?.isMainFrame, isMainFrame else {
            decisionHandler(.allow)
            return
        }
    
        guard let url = navigationAction.request.url else {
            decisionHandler(.cancel)
            return
        }
    
        guard allowLoadURL(url: url) else {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            decisionHandler(.cancel)
            return
        }
    
        decisionHandler(.allow)
    }

    func allowLoadURL(url: URL) -> Bool {
        let domain = GlobalConstant.domain
        if let host = url.host, host.contains(domain) {
            return true
        }
    
        return false
    }
}
您可以在此处详细阅读: 我在搜索时没有找到任何英文文章