美文网首页iOS Coder首页投稿(暂停使用,暂停投稿)
iOS中H5向native传值或从H5跳转到native

iOS中H5向native传值或从H5跳转到native

作者: voidxin | 来源:发表于2016-11-03 19:54 被阅读1840次

由于项目中H5页面比较多,这几天H5页面中有个新需求:点击H5页面的某个按钮需要传递参数和跳转到Native页面。
为了省事,找了个简单的方法:按钮点击后H5请求一个假的自定义的链接,把需要传递到Native的参数通过GET请求的方式拼接。然后再Native中WebView的delegate方法中去拦截URL,解析这个URL得到我们想要的值,并且跳转到想要的页面中去:
1:实现WebView的Delegate方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
   return [WGH5PageViewModel redirectionWithRequest:request];
}


//这是WGH5PageViewModel中的一个方法
+ (BOOL)redirectionWithRequest:(NSURLRequest *)request{
    
    NSString *requestString = [[[request URL]absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //转正办理(解雇员工时要从H5页面跳到原生的离职页面,并携带该员工的id
    if ([requestString containsString:@"dimission.html"]) {
        NSArray *strArr = [requestString componentsSeparatedByString:@"staffId="];
        NSString *staffId = strArr.lastObject;
        //由于使用了路由统跳,页面所需要的数据都放在字典中,然后再把字典转成String的形式传递到下一个页面
        NSDictionary *dataDic = @{@"type":@"1",@"staffId":staffId};
        NSString *dicStr = dataDic.mj_JSONString;
       //push到指定的Native页面
        [[HHRouter shared] pushURLString:[NSString stringWithFormat:@"/staffdimission/员工离职/%@",dicStr] animated:YES];
        return NO;
    }

    return YES;
}

由此简单的实现了从H5跳转到指定的Native页面并传递参数。
PS:方法中的关于路由通跳的实现可以参考我的这篇博文:http://www.jianshu.com/p/9e29c6d9983a
其中我把HHRouter的方法改进了一下,让页面的跳转可以在任何Object中实现(之前只能在ViewController中push到下一个页面,改进后可以在model中,也可在View中push)。

native和js交互最好还是使用JSCore,jscore使用的例子请看github:https://github.com/voidxin/VXJSCore/tree/master/VXJSContext

相关文章

网友评论

    本文标题:iOS中H5向native传值或从H5跳转到native

    本文链接:https://www.haomeiwen.com/subject/mfliuttx.html