OC和JS交互、JS和OC交互

来源:互联网 发布:squid Windows缓存 编辑:程序博客网 时间:2024/05/14 14:17

现在做开发 很多会出现交互问题  我在公司项目中也会用到交互  下面我大致写下 交互的代码

- (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);
        
    }];


    
}


0 0