WebAPP集成,本地打包,有两种方式java js通信
1.DCloud插件模式,参考SDK DEMO的H5Plugin,
Java:继承StandardFeature写接口。
public class DBControlPlugin extends StandardFeature
{
public void PluginTestFunction(IWebview pWebview, JSONArray array)
{
// 原生代码中获取JS层传递的参数,
// 参数的获取顺序与JS层传递的顺序一致
Log.d("DBControlPlugin", "PluginTestFunction");
String CallBackID = array.optString(0);
JSONArray newArray = new JSONArray();
newArray.put(array.optString(1));
newArray.put(array.optString(2));
newArray.put(array.optString(3));
newArray.put(array.optString(4));
// 调用方法将原生代码的执行结果返回给js层并触发相应的JS层回调函数
JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);
}
}
DCloud配置dcloud_properties.xml,增加
name="DBControlPlugin "
value="com.example.H5PlusPlugin.DBControlPlugin " />
注意:配置文件中的name就是exec的第一个参数,value是java的类位置。
JS代码:window.plus.bridge.exec("DBControlPlugin", "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);
java调用js:JSUtil.execCallback可以调用js
js调用java: window.plus.bridge.exec
2.WebView的addJavascriptInterface方式,网上很多事例,此处只讲关键代码:
webView = SDK.obatinFirstPage(app).obtainWebview();
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "jsi");
java调用js: webView.loadUrl("javascript:jsText('"+text+"')");
js调用java: jsi.func
总结,2种方案都可以实现Native和JS互相调用通信。