cordova混合开发:Android中native调用javascript
今天学习怎么在java中调用javascript方法,做个记录:
第一种方式,这个最简单:
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混合开发:Android中native调用javascript的更多相关文章
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...
- 在 Cordova/Phonegap for Android 中包含中文文件名的页面
在 Cordova/Phonegap for Android 中包含中文文件名的页面 本贴首发于: http://xuekaiyuan.com/forum.php?mod=viewthread& ...
- [Hybrid App]--Android混合开发,Android、Js的交互
AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- Android中Native和H5交互
1.概述 时至今日,H5的跨平台性越发凸显优势,一套代码适配android.ios,既能减少开发成本,又便于更新与维护.但是native的性能体验也确实更佳,尤其体现在复杂界面和频繁变化的界面上.事实 ...
- 在 Windows 10 上搭建 Cordova 跨平台开发 Android 环境
目录 安装 Cordova 安装 Java 和 Android 环境 创建 Cordova 应用程序 构建和运行 Cordova Cordova 简介:Cordova 原名 PhoneGap,是一个开 ...
- 在 Android 中如何调用 C 语言?
当我们的 Java 需要调用 C 语言的时候可以通过 JNI 的方式,Java Native Interface.Android 提供了对 JNI 的支持, 因此我们在 Android 中可以使用 J ...
- Android中WebView的JavaScript代码和本地代码交互的三种方式
一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...
- android 中webview调用js
1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true ...
- Android中webview跟JAVASCRIPT中的交互
在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面 ...
随机推荐
- 技术文档--volley 框架
Volley 框架 参考文档:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73e7e808c027fa ...
- JSP标准标签库(JSTL)之核心标签(上)
在myeclipse中新建web项目时,会自动为我们安装JSTL库,如下图: 核心标签是我们最常用的JSTL标签.在JSP页面中引用核心标签库的语法如下: <%@ taglib uri=&quo ...
- Entity Framework 4、5 多字段排序
public interface IOrderByExpression<TEntity> where TEntity : class { IOrderedQueryable<TEnt ...
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【客户端模式(Client Credentials Grant)】
github:https://github.com/IdentityServer/IdentityServer3/ documentation:https://identityserver.githu ...
- 团队作业—第二周—SRS
一.系统整体用例图: 二.用户用例图: 三.医院用例图:
- 让VS默认以管理员身份运行
In Windows 8 & 10, you have to right-click devenv.exe and select "Troubleshoot compatibilit ...
- javascript 日常总结
1. 将彻底屏蔽鼠标右键 oncontextmenu=”window.event.returnValue=false” < table border oncontextmenu=return(f ...
- Js中的一个日期处理格式化函数
由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...
- Atitit. .net c# web 跟客户端winform 的ui控件结构比较
Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net 4.5 webform Winform 命名空间 System.Web.UI.WebControls ...
- 360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击
就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检 ...