cordova混合开发:Android中native调用javascript
今天学习怎么在java中调用javascript方法,做个记录:
第一种方式,这个最简单:
1 | loadUrl( "javascript:func1()" ); |
要注意要在deviceready后调用,否则会报方法未定义的错误:"Uncaught ReferenceError: fun1 is not defined";
第二种方式:注册一个通道,在native中向js发送回调,这也是新版cordova推荐的方法:
javascript:
function myinit(){ alert('12355'); } //最省事的就是找个现成的插件添加个函数"callJSInit",能执行注册就可以,或者在cordova_plugins.js里注册一个单独的插件模块,见注1; cordova.define("插件模块ID", function(require, exports, module) { var exec = require('cordova/exec'); var callJS = { init: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); …… */ } }); } }; module.exports = callJS; }); //注1:在cordova_plugins.js里注册一个单独的插件模块 cordova.define('cordova/plugin_list', function(require, exports, module) { module.exports = [ //添加: { "file": "js文件路径", "id": "插件模块", "clobbers": ["navigator.callJS"] } ] } //在app deviceready后执行: navigator.callJS.init()
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"方法中的内容了。
//在app deviceready后执行:
分类:
Cordova
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)