WKWebview 导航响应方法在单击 webview 中的完成按钮时不会被调用

Posted

技术标签:

【中文标题】WKWebview 导航响应方法在单击 webview 中的完成按钮时不会被调用【英文标题】:WKWebview navigation response method isn't getting called upon clicking done button in a webview 【发布时间】:2019-04-29 00:56:55 【问题描述】:

我正在为我的 Swift 应用程序使用 WKWebview。出于某种原因,当用户单击WKWebView 中的完成按钮时,不会调用WKWebview 导航响应委托方法。当我在网络上尝试相同的操作时,它会重定向到正确的 url。

到目前为止,我已经尝试在 viewDidLoad 中配置 WKWebView 之前清除 WKWebview 缓存,或者如果我收到内存警告。此外,确保我的info.plist 允许任意加载,NSExceptionAllowsInsecureHTTPLoads 用于测试目的。尽管尝试了这些东西来调试,导航响应委托方法仍然没有被调用。

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) 
        if let webviewUrl = webView.url 
            let urlString = webviewUrl.absoluteString
            if urlString.contains("\(myUrlComponents)") 
                self.navigationController?.popViewController(animated: true)
                decisionHandler(.cancel)
                return
            
        
        decisionHandler(.allow)
    

我希望能够在调用导航响应方法时检测到特定的WKWebview url 并返回上一个屏幕。

【问题讨论】:

什么“完成按钮”?导航涉及链接,而不是按钮。 我知道。我的网页视图中有一个完成按钮。按下完成按钮后,页面将重定向到不同的 url。通常在发生这种情况时会调用导航响应,并且我可以检查新的 url。但是,问题是当页面重定向到新 url 时导航响应没有被调用。 您确定它正在重定向到新页面吗?而不是用 javascript 重写当前页面的内容? “按下完成按钮后,页面将重定向到不同的 url。” 如何? @ZevEisenberg 我对网络不太熟悉。我会问网络开发者是否是后者。 【参考方案1】:

我想您会发现,如果您使用的委托函数看起来与您正在使用的函数相同,除了“decisionHandler”是一个以 WKNavigationActionPolicy 作为其参数的函数之外,它将被调用。

【讨论】:

以上是关于WKWebview 导航响应方法在单击 webview 中的完成按钮时不会被调用的主要内容,如果未能解决你的问题,请参考以下文章

检测 WKWebView 中的非导航按钮单击

WKWebView 点击广告不会触发委托方法

导航到特定 URL 时关闭 WKWebView

CSS 未在 WKWebView 中加载

从 swift 评估 javascript 函数,在完成处理程序中得到 nil

为啥 wkwebview 在科尔多瓦的运行速度比移动 safari 慢?