1. 程式人生 > >H5與App的互動(WebViewJavascriptBridge)

H5與App的互動(WebViewJavascriptBridge)

最近有時間整理下H5與APP的互動框架(WebViewJavascriptBridge),既可以和ios互動也可以和安卓互動,我只做了和IOS的互動,所以只闡述和IOS的互動。

1:JS端的操作

/* 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)

             })
       });
2:IOS端的操作,因為我不是很多IOS,所以只能貼出自己找的方法了,僅供參考。
1:匯入標頭檔案
#import "WebViewJavascriptBridge.h"
@property WebViewJavascriptBridge* bridge;
2:例項化這個_bridge

//開啟除錯資訊
 [WebViewJavascriptBridge enableLogging];

//關聯webView
 _bridge = [WebViewJavascriptBridge bridgeForWebView:_webview];
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];
    }];
WebViewJavascriptBridge這個H5與APP互動的框架還是挺不錯的,既可以和IOS互動也可以和安卓互動,因為我做的是H5端的,安卓和IOS不是很懂,所以有不說的不對的地方還希望有看到朋友指教下。