现在做开发 很多会出现交互问题 我在公司项目中也会用到交互 下面我大致写下 交互的代码
- (void)loadWeb{
//1..加载H5地址
//加载地址
NSString *str = @"H5传过来的地址";
NSURLRequest *reUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:str]];
[self.webView loadRequest:reUrl];
///主要 这里是直接传地址给H5 属于get方法传输 但是有参数长度限制 也有post传输 不限制参数长度 这里不另外写 很简单 也是几行代码的事情
//2..JS调用OC 其实就是客户端传给H5页面的地址 这里也要约定字段
NSString *string = [NSString stringWithFormat:@"?约定字段={\"参数名\":\"参数内容\"}"];
string = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *strURL = [NSString stringWithFormat:@"%@%@",str,string];
NSURL *cateUrl = [NSURL URLWithString:strURL];
NSURLRequest *request = [NSURLRequest requestWithURL:cateUrl];
[self.webView loadRequest:request];
}
//进行JS交互
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//和H5端约定的字段名
if([request.URL.absoluteString rangeOfString:@"约定字段"].location != NSNotFound){
NSString *jsonStr = [request.URL.absoluteString componentsSeparatedByString:@"约定字段"][1];
NSDictionary *jsonDict = [self dictionaryWithJsonString:jsonStr];
NSLog(@"从H5端获取的参数字典");
//与后台进行交互 上传服务器 这里是测试demo 假设传回来的字典参数都上传服务器
[self postToServer:jsonDict];
return NO;
}
return YES;
}
- (void)postToServer:(NSDictionary *)dict{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:@"后台接口地址" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (responseObject) {
NSLog(@"上传成功");
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error.description);
}];
}