iOS中H5向native傳值或從H5跳轉到native
阿新 • • 發佈:2019-02-06
本部落格遷移來自: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)。