H5與App的互動(WebViewJavascriptBridge)
阿新 • • 發佈:2019-02-17
最近有時間整理下H5與APP的互動框架(WebViewJavascriptBridge),既可以和ios互動也可以和安卓互動,我只做了和IOS的互動,所以只闡述和IOS的互動。
1:JS端的操作
2:IOS端的操作,因為我不是很多IOS,所以只能貼出自己找的方法了,僅供參考。/* WebViewJavascriptBridge框架使用 這段程式碼是固定的,必須要放到js中*/ function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } window.WVJBCallbacks = [callback]; var WVJBIframe = document.createElement('iframe'); WVJBIframe.style.display = 'none'; WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; document.documentElement.appendChild(WVJBIframe); setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0) } /*與OC互動的所有JS方法都要放在此處註冊,才能呼叫通過JS呼叫OC或者讓OC呼叫這裡的JS*/ setupWebViewJavascriptBridge(function(bridge) { //js呼叫oc的方法 clickHeadImage(方法名與APP端保持一致) 大括號內是傳遞引數的方式 window.WebViewJavascriptBridge.callHandler('clickHeadImage', {"userId":1}, function(response) { console.log('JS got response', response); }); //oc呼叫Js的方法,並且有返回函式 callHeandler(方法名與app端保持一致) data(IOS傳過來的資料) bridge.registerHandler('callHandler', function(data, responseCallback) { //js回撥函式返回資料 var responseData = { 'Javascript Says':'I am Js, CallBack Now!!!!!' } responseCallback(responseData,data) }) });
1:匯入標頭檔案
#import "WebViewJavascriptBridge.h"
@property WebViewJavascriptBridge* bridge;
2:例項化這個_bridge
//開啟除錯資訊
[WebViewJavascriptBridge enableLogging];
//關聯webView
_bridge = [WebViewJavascriptBridge bridgeForWebView:_webview];
WebViewJavascriptBridge這個H5與APP互動的框架還是挺不錯的,既可以和IOS互動也可以和安卓互動,因為我做的是H5端的,安卓和IOS不是很懂,所以有不說的不對的地方還希望有看到朋友指教下。3:(1)在oc中註冊 & (2)在js中處理回撥 //點選js事件 js向oc通訊(觸發oc事件) [_bridge registerHandler:@"registerHandler" handler:^(id data, WVJBResponseCallback responseCallback) { NSLog(@"datattatatatat=== %@",[NSString stringWithFormat:@"%@",data]); UIAlertView *aler = [[UIAlertView alloc]initWithTitle:nil message:@"js呼叫oc的按鈕提示" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil]; aler.tag = 100; [aler show]; }]; id data = @{@"資訊來源:":@"點選oc事件,oc向js傳送資訊並得到js反饋"}; [_bridge callHandler:@"callHandler" data:data responseCallback:^(id responseData) { NSLog(@" ========= %@",responseData); self.lab.text = [NSString stringWithFormat:@"btn2 獲得js反饋 %@",responseData]; }];