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部分的代码).下面 ...
随机推荐
- Heartbeat的两个小BUG
1,heartbeat启动不起来 如果你是用了linux-ha.japan里面的repo文件,Yum安装pacemaker+heartbeat时. 可能会发现打了service heartbeat s ...
- 笔记:Hyper-V上Centos 6.5分辨率调整问题解决笔记
最近忙的没有心情写东西,果然博客就这么长草了.今天就稍微写一点点东西吧,反正这问题挺烦的. 背景如下:为准备做redis集群实验,特在笔记本上搭建CentOS6.5的Hyper-V虚拟机. 虚拟机创建 ...
- Spec 网上选课
角色定义 管理员 管理员负责向系统中添加学生和教师的个人信息以及课程信息,实现对教师.学生和课程信息的修改.删除.查询操作,并对管理员个人密码进行修改. 学生 学生具有查看待选课程信息和任课教师信息. ...
- Nginx学习笔记(七) 创建子进程
Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程. 在Nginx中,master进程和worker进程 ...
- [自制简单操作系统] 1、从0-1到汇编再到c语言的奥秘
目录: 1.用0-1编写最简单的操作系统 2.用汇编改写上面0-1程序 2.1 只用DB的汇编改写版 2.2 加入RESB汇编的改写版 2.3 进一步使用汇编替换0-1文件 2.4 核心程序也用 ...
- [ACM_数学] Counting Solutions to an Integral Equation (x+2y+2z=n 组合种类)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27938#problem/E 题目大意:Given, n, count the numbe ...
- [51单片机] TFT2.4彩屏3 [自制动画效果-滑块+吊钩]
>_<:引脚和前面几个连接一样,这里做了一个实用的动画效果,模拟起重机的2维视图. #ifndef __ILI9325_H__ #define __ILI9325_H__ void ILI ...
- SQL Server 2014 安装小记
一.写在前面 由于想体验下微软的Windows Azure在SQL Server数据库方面的使用,笔者花了点时间安装了一下SQL Server 2014,安装很简单,基本就是稍微做些配置即可,笔者在此 ...
- jenkins2 插件安装
文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...
- paip.杀不死进程的原因--僵尸进程的解决.txt
paip.杀不死进程的原因--僵尸进程的解决.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...