由于項(xiàng)目中H5頁面比較多,這幾天H5頁面中有個(gè)新需求:點(diǎn)擊H5頁面的某個(gè)按鈕需要傳遞參數(shù)和跳轉(zhuǎn)到Native頁面。
為了省事,找了個(gè)簡(jiǎn)單的方法:按鈕點(diǎn)擊后H5請(qǐng)求一個(gè)假的自定義的鏈接,把需要傳遞到Native的參數(shù)通過GET請(qǐng)求的方式拼接。然后再Native中WebView的delegate方法中去攔截URL,解析這個(gè)URL得到我們想要的值,并且跳轉(zhuǎn)到想要的頁面中去:
1:實(shí)現(xiàn)WebView的Delegate方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
return [WGH5PageViewModel redirectionWithRequest:request];
}
//這是WGH5PageViewModel中的一個(gè)方法
+ (BOOL)redirectionWithRequest:(NSURLRequest *)request{
NSString *requestString = [[[request URL]absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//轉(zhuǎn)正辦理(解雇員工時(shí)要從H5頁面跳到原生的離職頁面,并攜帶該員工的id
if ([requestString containsString:@"dimission.html"]) {
NSArray *strArr = [requestString componentsSeparatedByString:@"staffId="];
NSString *staffId = strArr.lastObject;
//由于使用了路由統(tǒng)跳,頁面所需要的數(shù)據(jù)都放在字典中,然后再把字典轉(zhuǎn)成String的形式傳遞到下一個(gè)頁面
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;
}
由此簡(jiǎn)單的實(shí)現(xiàn)了從H5跳轉(zhuǎn)到指定的Native頁面并傳遞參數(shù)。
PS:方法中的關(guān)于路由通跳的實(shí)現(xiàn)可以參考我的這篇博文:http://www.itdecent.cn/p/9e29c6d9983a
其中我把HHRouter的方法改進(jìn)了一下,讓頁面的跳轉(zhuǎn)可以在任何Object中實(shí)現(xiàn)(之前只能在ViewController中push到下一個(gè)頁面,改進(jìn)后可以在model中,也可在View中push)。