首先先创建一个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;
}
}