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

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

HTML代码:




    






之后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;

    }

}

 

你可能感兴趣的:(JavaScript,iOS,开发)