JS和Native的通信方式
从JS到Java通信方式有2种。
- addJavascriptInterface方法JS_OBJECT(默认)
→参数是直接从JS传到Java对象的。同步处理方式。
- js的prompt方法
→①Android2.3的虚拟机使用addJavascriptInterface的时候存在BUG,则可以使用prompt方法。
②addJavascriptInterface不支持的情况下(内存中不存在Cordova定义的JAVA对象_cordovaNative的时候)、自动转到prompt方法使用。
有些机器(Galaxy2 Android4.1)的addJavascriptInterface的返回参数不支持,则自动转换为prompt方法。
并且JS_OBJECT的返回值的参数不存在的情况下,自动再实行一遍Prompt方法。
通信模式是根据环境不同自动切换以外,还可以自己指定:在deviceReady事件执行后可以进行设置。
var exec = cordova.require('cordova/exec');
exec.setJsToNativeBridgeMode(exec.jsToNativeModes.JS_OBJECT);
var exec = cordova.require('cordova/exec');
exec.setJsToNativeBridgeMode(exec.jsToNativeModes.PROMPT);
从Java到JS通信有4种方式 ,经常使用的是Polling方法和ONLINE_EVENT
・Polling方法 (异步方法)
→50msJSTimer进行轮询,判断JAVA侧有没有JS的回调方法
・LOAD_URL方法
→webView.loadUrl("javascript:")的方法、
为了修改一个[送信后软键盘消失]的BUG
・ONLINE_EVENT方法(默认方法)
→网络的在线离线事件监视。
在事件回调中执行一次POLLING的方法。不使用JSTIMER轮询。
・PRIVATE_API方法
→Webviewの私有方法进行反射
这些通信模式需要指定的情况下在deviceReady事件之后执行
var exec = cordova.require('cordova/exec');
exec.setNativeToJsBridgeMode(exec.nativeToJsModes.LOAD_URL);
var exec = cordova.require('cordova/exec');
exec.setJsToNativeBridgeMode(exec.nativeToJsModes.jPRIVATE_API);