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

来源:互联网 发布:htct328t软件下载 编辑:程序博客网 时间:2024/05/22 09:46

本博客迁移来自:http://www.jianshu.com/users/465865c268ed/latest_articles
由于项目中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

0 0
原创粉丝点击