? ? ? 最近在做一個項目用到了原生App與H5交互义图,之前有做過簡單的H5頁面直接調(diào)用原生方法的例子祟滴,就是利用UIWebView中的代理方法
//webview每次加載之前都會調(diào)用這個方法,利用該代理方法截取JS的href來調(diào)用原生的方法
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
? ? ? ?然而這次的交互要求是進行雙向通信,即JS調(diào)用原生App的方法之后歌溉,原生App要講相關(guān)參數(shù)信息返回給H5頁面,H5頁面接受到參數(shù)信息后做其他處理骑晶。
例:H5頁面的發(fā)布信息按鈕痛垛,在點擊按鈕后要在原生端判斷用戶是否登錄,若沒有登錄則彈出原生登錄頁面桶蛔,登錄成功后將用戶信息返回給H5頁面匙头,繼續(xù)發(fā)布流程。
重點來了仔雷!
在這里推薦一個比較好的第三方庫即:WebViewJavascriptBridge?
地址:https://github.com/marcuswestin/WebViewJavascriptBridge
通過使用該庫可以輕松實現(xiàn)JS與原生交互蹂析。
//初始化WebViewJavascriptBridge方法
_bridge= [WebViewJavascriptBridge bridgeForWebView:self.BookWebView webViewDelegate:self handler:^(id data,WVJBResponseCallback responseCallback) {
}];
//原生與JS約定接口名為“testObjcCallback”,data是JS傳遞過來的信息碟婆,responseCallback來將信息傳遞給JS
[_bridge registerHandler:@"testObjcCallback" handler:^(id ?data,WVJBResponseCallback responseCallback) {
responseCallback("postInfomationToJS")
}];
UIWebView頁面信息的離線緩存
推薦一個比較好的第三方庫RNCachingURLProtocol?电抚,只需要在AppDelegate中加入下面方法即可。
[NSURLProtocolregisterClass:[RNCachingURLProtocolclass]];
地址:https://github.com/rnapier/RNCachingURLProtocol