WKWebview 实现post请求 并以表单形式提交

本文介绍了如何在iOS应用中使用WKWebView组件实现POST请求,并以表单形式提交数据。首先,创建一个HTML文件并加载到WKWebView中。然后,设置webView的navigationDelegate,并在代理方法中判断导航类型,处理点击链接的行为。最后,在`webView:didFinishNavigation:`方法中,通过JavaScript执行POST请求,传递JSON格式的数据到指定URL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先先创建一个HTML文件 拖到项目中 

HTML代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>

</head>
<body>

</body>

<script type="text/javascript">
    function my_post(path, params) {

        var method = "POST";
        var form = document.createElement("form");
        form.setAttribute("method", method);
        form.setAttribute("action", path);

        for(var key in params){

            if (params.hasOwnProperty(key)) {

                var hiddenFild = document.createElement("input");
                hiddenFild.setAttribute("type", "hidden");
                hiddenFild.setAttribute("name", key);
                hiddenFild.setAttribute("value", params[key]);
            }

            form.appendChild(hiddenFild);
        }

        document.body.appendChild(form);
        form.submit();
    }
</script>

之后wkwebview的viewdidload中写:

    self.webView.navigationDelegate = self;

    // 标记本地HTML文件只加载一次

    self.isOpen = YES;

    NSString * path = [[NSBundle mainBundle] pathForResource:@"wkwebviewPost" ofType:@"html"];

    NSString * html = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

    [self.webView loadHTMLString:html baseURL:[[NSBundle mainBundle] bundleURL]];

之后要在代理方法写:

#pragma mark --加载本地HTML

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

    [super webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];

    // 必须实现decisionHandler的回调,否则就会报错

    if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {

        decisionHandler(WKNavigationActionPolicyCancel);

        NSLog(@"WKNavigationActionPolicyCancel");

    } else {

        decisionHandler(WKNavigationActionPolicyAllow);

        NSLog(@"WKNavigationActionPolicyAllow");

    }

}

 

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{

    if (self.isOpen) {

        // 要传递的参数

      NSString * dataStr = @"{\"token\":\"cac6af340960485aa334416c8a34ddbf\"}";

        // 要访问的地址

        NSString * url = @"http://192.173.1.8:8000/";

        NSString * js = [NSString stringWithFormat:@"my_post(\"%@\", %@)",url,dataStr];

        // 最后执行JS代码

        [webView evaluateJavaScript:js completionHandler:nil];

        // 设置标记确保只执行一次

        self.isOpen = NO;

    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值