JSBrige 源码简要分析

JsBrige 作为 Android 与 js 交互的一个开源库,很多地方都用得到,最近有时间,看了一下源码,现在做一个简要的分析记录。
JsBrige 的地址 https://github.com/lzyzsd/JsBridge

JS 调用 Native 方法 的过程

. 调用 BridgeWebView#registerHandler 进行注册;(Native)

. web 调用 WebViewJavascriptBridge.callHandler, 方法名与 第一步注册的方法名一致;(js)

. WebViewJavascriptBridge#_doSend() 改变 iframe.src;j

. 导致 WebViewClient#shouldOverrideUrlLoading() 重新加载; n

. BridgeWebView#flushMessageQueue –> BridgeWebView#loadUrl() 将重新加载 url 将 _fetchQueue 回传到 js; n

. WebViewJavascriptBridge#_fetchQueue() 改变 ifram.src 将数据回传 native; js

. WebViewClient#shouldOverrideUrlLoaqueueMessageding() –> BridgeWebView#handlerReturnData(); n

. 根据回传的数据,将第一步注册的方法取出,调用其对应的 CallBackFunction#onCallBack 回到方法; n

. 将 map 中注册的方法移除;n


Native 调用 js 方法的过程

. WebViewJavascriptBridge#registerHandler() 注册 function name; j

. BridgeWebView#callHandler() 将与js 约定好的 function name 穿进去; n

. BridgeWebView#dosend() –> BridgeWebView#queueMessage()
–> BridgeWebView#dispatchMessage() 将 javascript:WebViewJavascriptBridge._handleMessageFromNative 与 function name 整合
–> 调用 webview#loadUrl() 将数据传导 js ; n

. WebViewJavascriptBridge#_dispatchMessageFromNative, 找到 相应的 function name
–> responseCallback –> WebViewJavascriptBridge#_doSend() 将信息回传会 native ; js

. 最后回调 onCallBack;

JS 调用 Native 方法过程的流程图


Native 调用 js 方法的过程的流程图


总结

JsBrige 没有利用常规的 @JavascriptInterface 来进行 Android 与 js 的交互,而是采用 url 带参,拦截的方式,这不失为一种新的方法。

yxhuang wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客