WKWebView如何实现post请求

      WKWebView如何实现post请求无评论

之前的项目里一直都在用UIWebview,因为苹果上架App Store已经不允许继续使用UIWebview,改成了WKWebView。这下可踩了一个坑,WKWebView不能发送POST请求。于是在网上找到了一个曲线救国的方法,利用JS来动态的生成HTML里的form标签,然后用form表单来实现POST请求。

思路如下:
1.将JS代码定义成一个宏,在使用的时候直接调用。
2.在创建好的WKWebView上直接执行JS代码即可。

具体代码实现如下

一、先定义一个JS代码的宏

#define POST_JS @"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();\
}"

二、在viewDidLoad里这样写

- (void)viewDidLoad {
    [super viewDidLoad];    // Do any additional setup after loading the view.
    WKWebView * myWeb = [[WKWebView alloc] initWithFrame:self.view.frame ];    self.myWeb = myWeb;
    [self.view addSubview:myWeb];    
    // 要传递的参数,(在开发中可以字典转成json字符串即可)
    NSString * dataStr = @"{\"token\":\"cac6af340960485aa334416c8a34ddbf\"}";    // 发送的地址
    NSString * url = @"http://192.168.21.73:8080/show_meta/";    // 最终要执行的JS代码
    NSString * js = [NSString stringWithFormat:@"%@my_post(\"%@\", %@)",POST_JS,url,dataStr];    // 执行JS代码
    [myWeb evaluateJavaScript:js completionHandler:nil];
}

如果觉得还不够好可以将下面的请求封装成一个小方法,使用时只传要访问的地址和参数就可以了。这样就不会每次都为了POST请求而加载一个空网页了,并且调用起来也很方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注