JsBridge 实现分析

225 阅读1分钟

大体上结构:

  • 首先就是在onPageFinished(WebView view, String url)时,也就是加载完网页后,会将assert文件夹里面的WebViewJavascriptBridge.js添加到网页中。 因此可以在js中可以进行js的一些操作。比如 window.WebViewJavascriptBridge.callHandler()方法调用java方法,并可以添加回调方法。

  • java调用js方法 使用webview.loadUrl();方法调用js内方法,调用js回调则封装为CallBackFunction对象,并使用hashmap存在本地。map的key使用时间戳和一个自增数+起来的字符串。 然后这个key传入js。当js方法运行完成后,跳转到一个新的超链接,链接协议头为yy://,将js运行后返回的数据和回调id做成链接体。然后通过WebViewClient 的shouldOverrideUrlLoading()方法获得回调数据和回调id。

  • js调用java方法 也是将回调进行存储,然后跳转到一个新的超链接,链接协议头为yy://。 java这边通过registerHandler(String handlerName, BridgeHandler handler)方法将js需要调用的方法和回调存到messageHandlers 一个HashMap中去。 当shouldOverrideUrlLoading()检测到信息为调用java方法时,遍历hashmap后根据handerName参数获取出调用BridgeHandler对象,并调用它的回调方法。