1. 程式人生 > >iOS中H5向native傳值或從H5跳轉到native

iOS中H5向native傳值或從H5跳轉到native

本部落格遷移來自: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)。