检测 url 时,Swift ShouldStartLoadWith 不起作用

Ano*_*s-E 5 uiwebview swift

我的应用程序包含 Webview To Show Payment Form,当我们完成填写数据后,我们可以按下 Done 按钮,然后 Webview 将重定向到其他 Url。我已经搜索过这个函数,我找到了 shouldStartLoadWith 函数来解决这个问题,但是当我实现这个时,它不起作用

这是我的代码:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        if request.url?.absoluteString == "https://xyzbank.com" {

            print("SUCCESS")
            return false
        }
        print("NOT SUCCESS")
        return true
    }
Run Code Online (Sandbox Code Playgroud)

它不是打印它们中的任何一个。

这是我的其余代码:我认为我已经调用了 webview 的委托方法,但它仍然无法正常工作

override func viewDidLoad() {
        super.viewDidLoad()

        hud.textLabel.text = "Processing..."
        hud.show(in: self.view)
        let mpayment: Payment = params.payment

        mywebview.navigationDelegate = self
        //Showing webview url....


    }

    func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
        print(error.localizedDescription)
    }
    func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        print("Start to load")
    }
    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
        print("DID FINISH NAVIGATION")
    }
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        self.hud.textLabel.text = "Success"
        self.hud.detailTextLabel.text = nil
        self.hud.dismiss(animated: true)
    }

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        if request.url?.absoluteString == "https://example.com" {

            print("SUCCESS")
            return false
        }
        print("NOT SUCCESS")
        return true
    }
Run Code Online (Sandbox Code Playgroud)

小智 14

实际上,正如我所看到的,您的 webview 使用的是较新版本的 WKWebview,但 shouldStartLoadWith 函数用于 UiWebview,对于 WkWebview,我们应该使用 decisionHandler 函数。代码应该是这样的:

 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping ((WKNavigationActionPolicy) -> Void)) {

    print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

    if let url = navigationAction.request.url {
            print(url.absoluteString)
            if url.absoluteString.hasPrefix("https://example.com"){
                print("SUCCESS")
         }
    }

    decisionHandler(.allow)
}
Run Code Online (Sandbox Code Playgroud)