iOS WKWebView与JS交互传值,之前的一篇文章已经介绍过了 https://blog.csdn.net/zjpjay/article/details/103310279
NSString *jsStr = [NSString stringWithFormat:@"ocSetDeviceCode('%@')",[ZJPNetWork getUUID]];
[self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@--%@",result,error);
}];
这里是向 JS 传一个参数的写法,我们要是传多个参数了,该如何传递呢????
相信很多人都会说,传一个字典啊!是的,就是传字典,但是该怎么传呢???
应该有部分人会想当然的这样写了
NSDictionary *dict = @{@"alarmStatus":@"0",@"alarmType":@"1",@"outletId":@"56"};
NSString *jsStr = [NSString stringWithFormat:@"OCtoJS('%@')",dict];
[self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@--%@",result,error);
}];
NSString *jsStr = [NSString stringWithFormat:@"ocSetDeviceCode('%@')",dict];这是错误的写法,字典怎么可以直接变字符串呢?应该要把字典转化成字符串,但是不是这么转的
正确转法
NSDictionary *dict = @{@"alarmStatus":@"0",@"alarmType":@"1",@"outletId":@"56"};
//转为json
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:(NSJSONWritingPrettyPrinted) error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
到了这一步,很多人肯定就会这样写了
NSDictionary *dict = @{@"alarmStatus":@"0",@"alarmType":@"1",@"outletId":@"56"};
//转为json
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:(NSJSONWritingPrettyPrinted) error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"jsonStr == %@",jsonStr);
NSString *jsStr = [NSString stringWithFormat:@"OCtoJS('%@')",jsonStr];
[self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@--%@",result,error);
}];
但是这样还是错误的,啊!错误❌???这样还错误啊!字典不是已经转 JSON 字符串了吗????
对,字典是转的没有错!那是哪里错了呢???
这一步错了 NSString *jsStr = [NSString stringWithFormat:@"OCtoJS('%@')",jsonStr];
这一步怎么错了啊,不是传参数了吗!怎么还错了呢?
是传了,但是格式不对,@"OCtoJS('%@')" 改成 @"OCtoJS(%@)" 就对了
这是正确的写法NSString *jsStr = [NSString stringWithFormat:@"OCtoJS(%@)",jsonStr];
现在补充一点,下面👇这种写法也是可以的
OC->JS 传字典的方法:
NSString *jscript = [NSString stringWithFormat:@"OCtoJS('%@',{%@});", self.URLString, dict];
// 调用JS代码
[self.wkWebView evaluateJavaScript:jscript completionHandler:^(id object, NSError * _Nullable error) {
}];
注意手动写字典的格式: @"\"name\":\"xxxx\",\"age\":\"xxxx\""