JavaScript native 相互調(diào)用的框架分析(WebViewJavascript)

創(chuàng)建 Bridge

+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView;

并且設(shè)置 Bridge 為 webview 和 bridgebase 的代理


OC 調(diào)用 JS

1. OC 傳入方法名 handlerName 和 data(參數(shù)),JS 返回 responseCallback

使用數(shù)組把 handlerName 和參數(shù) data 放入字典中

使用

- (void)callHandler:(NSString *)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback 

e.g.
x
[bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
// you can do something here
}

然后在JS 端注冊(cè)同名的function 以testJavascriptHandler 為例

bridge.registerHandler('testJavascriptHandler',function(data, responseCallback) {
// you can do something here }
)

原理

js 已經(jīng)注冊(cè)了 以methodName 為表示的方法 OC通過(guò)

[_webView stringByEvaluatingJavaScriptFromString:javascriptCommand];

來(lái)執(zhí)行JS語(yǔ)句


JS調(diào)用OC語(yǔ)句

OC注冊(cè)一個(gè)橋接

[_bridge registerHandler:@"myHander" handler:^(id data, WVJBResponseCallback responseCallback) {
// you can do something here 

}];

參數(shù)有 HanderName 還有 回調(diào) 和 嵌套回調(diào)

js執(zhí)行某個(gè)方法

bridge.callHandler('myHander',{'foo':'bar'},function(response){
// you can do something here 
    })

Javascript調(diào)用OC 使用的是 HanderName 對(duì)應(yīng)特定 Block 塊(Object)


原理

1、監(jiān)聽

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

方法

2、截獲request的URL

NSURL *url = [request URL];
    
-(BOOL)isCorrectProcotocolScheme:(NSURL*)url {
if([[url scheme] isEqualToString:kCustomProtocolScheme]){
    return YES;
} else {
    return NO;
}
}

-(BOOL)isQueueMessageURL:(NSURL*)url {
if([[url host] isEqualToString:kQueueHasMessage]){
    return YES;
} else {
    return NO;
}
}

3、通過(guò)URL的 scheme 和 host 判斷 還有 uniqueID (對(duì)應(yīng)具體對(duì)象的block塊)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容