一、在Android开发中,能实现Js调用Native,有4种方法:
- JavascriptInterface
- WebViewClient.shouldOverrideUrlLoading()
- WebChromeClient.onConsoleMessage()
- WebChromeClient.onJsPrompt()
二、JsBridge
1.协议
Js调用Native所遵循的协议
className:指定native层要完成某个功能调用的类名
methodName:指定native层要完成某个功能调用的方法名
jsonObj:js传递过来的参数
port:port值是指当native需要将操作结果返回给js时,在js中定义一个callback,并将这个callback存储在指定的位置上,这个port就定义了callback的存储位置。
2.原理
Js调用Native是通过window.prompt(url);
Native调用Js是通过WebView.loadUrl("javascript:function()");。
Js调用Native: 通过WebView.loadUrl("javascript:function()")
;
Native调用Js: 通过window.prompt(url)
调用WebChromeClient中的onJsPromot
方法,然后通过HashMap找到Native中相应方法进行反射调用
。Java将处理结果通过Js带来的Callback
,通过loadUrl
方式回传给Js。
Js与Native间的Callback可通过Handler进行消息传递。CallBack类是用来回调Js中回调方法的Java对应类,通过拥有主线程Looper的Handler回调给Js动作。
- 备注
鉴于不同的JsBridge的实现方式不同,主要区别在于Js调用Native以及Handler/MessageQueue对双方消息传递的使用。所以此文不通用。
网友评论