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

由于項目中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.lxweimin.com/p/9e29c6d9983a
其中我把HHRouter的方法改進了一下,讓頁面的跳轉可以在任何Object中實現(之前只能在ViewController中push到下一個頁面,改進后可以在model中,也可在View中push)。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容