标签:
今天学习怎么在java中调用javascript方法,做个记录:
第一种方式,这个最简单:
loadUrl("javascript:func1()");
要注意要在deviceready后调用,否则会报方法未定义的错误:"Uncaught ReferenceError: fun1 is not defined";
第二种方式:注册一个通道,在native中向js发送回调,这也是新版cordova推荐的方法:
javascript:
function myinit(){ alert(‘12355‘); } //最省事的就是找个现成的插件添加个函数"callJSInit",能执行注册就可以 cordova.define("插件ID", function(require, exports, module) { var exec = require(‘cordova/exec‘); window.callJSInit = function() { cordova.require(‘cordova/channel‘).onCordovaReady.subscribe(function(){ exec(succeedCallback, null, "PluginName", "callJSInit", []); function succeedCallback(message){ //执行js代码 eval(message); //还可以这样,大胆的发挥你的想象力 /* if(message==‘f1‘) alert(1); else if(message == ‘f2‘) alert(2); …… */ } }); } }); //在app deviceready后执行: callJSInit()
java文件:
public class PluginName extends CordovaPlugin { private static CallbackContext mCallbackContext; @Override public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException { if (action.equals("callJSInit")) { mCallbackContext = callbackContext; //拿到回调对象并保存 //PluginResult dataResult = new PluginResult(PluginResult.Status.OK, "calljs init ready"); //dataResult.setKeepCallback(true);// 非常重要 //mCallbackContext.sendPluginResult(dataResult); return true; } else { return false; } } @Override public Object onMessage(String id, Object data) { return null; } public static void callJS(String message) { if (mCallbackContext != null) { PluginResult dataResult = new PluginResult(PluginResult.Status.OK, message); dataResult.setKeepCallback(true);// 非常重要 mCallbackContext.sendPluginResult(dataResult); } } }
在其它java文件中调用js:
PluginName.callJS("myinit()");
运行app就会显示"myinit"方法中的内容了。
cordova混合开发:Android中native调用javascript
标签:
原文地址:http://www.cnblogs.com/Sandheart/p/5334058.html