ios 如何检测用户提交的表单提交

hgqdbh6s  于 2023-05-02  发布在  iOS
关注(0)|答案(1)|浏览(137)

我需要检测用户使用WebKit的表单提交操作。
到目前为止,我可以用navigationAction.navigationType == WKNavigationTypeFormSubmitted检查一个动作是否是表单提交。
问题是,第一次提交后重定向的URL可能有navigationTypeWKNavigationTypeFormSubmitted,我不希望结果中出现这些。
我还知道我可以检查导航是否重定向到 webView:didReceiveServerRedirectForProvisionalNavigation:但我不知道如何将这两个方法连接在一起使其工作。

c3frrgcw

c3frrgcw1#

使用这种方法,您可以检测用户的初始表单提交,并忽略具有相同导航类型的任何重定向URL。

// Initialize formSubmittedByUser variable to false
var formSubmittedByUser = false

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .formSubmitted && !formSubmittedByUser {
        // First form submission by the user
        formSubmittedByUser = true
        // Handle the form submission
        // ...
        decisionHandler(.allow)
    } else {
        decisionHandler(.allow)
    }
}

func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
    if formSubmittedByUser {
        // Current navigation is a redirected URL from the initial form submission
        formSubmittedByUser = false
    }
}

首先,设置一个布尔变量来跟踪表单是否已由用户提交。例如,您可以调用此变量“formSubmittedByUser”并将其初始化为false。
然后,在webView:decidePolicyForNavigationAction:decisionHandler中:方法,检查navigationType是否为WKNavigationTypeFormSubmitted,以及formSubmittedByUser变量是否为false。如果两个条件都为true,则将formSubmittedByUser变量设置为true,并继续处理表单提交。
在webView:didReceiveServerRedirectForProvisionalNavigation中:方法,检查formSubmittedByUser变量是否为true。如果为真,那么您知道当前导航是来自初始表单提交的重定向URL。然后可以将formSubmittedByUser变量重置为false,以便它可以检测用户的下一次表单提交。

相关问题