今天学习怎么在java中调用javascript方法,做个记录:

第一种方式,这个最简单:

  1. loadUrl("javascript:func1()");

要注意要在deviceready后调用,否则会报方法未定义的错误:"Uncaught ReferenceError: fun1 is not defined";

第二种方式:注册一个通道,在native中向js发送回调,这也是新版cordova推荐的方法:

javascript:

  1. function myinit(){
  2. alert('12355');
  3. }
  4.  
  5. //最省事的就是找个现成的插件添加个函数"callJSInit",能执行注册就可以,或者在cordova_plugins.js里注册一个单独的插件模块,见注1;
  6. cordova.define("插件模块ID", function(require, exports, module) {
  7. var exec = require('cordova/exec');
  8. var callJS = {
  9. init:function() {
  10. cordova.require('cordova/channel').onCordovaReady.subscribe(function(){
  11. exec(succeedCallback, null, "PluginName", "callJSInit", []);
  12. function succeedCallback(message){
  13. //执行js代码
  14. eval(message);
  15. //还可以这样,大胆的发挥你的想象力
  16. /*
  17. if(message=='f1')
  18. alert(1);
  19. else if(message == 'f2')
  20. alert(2);
  21. ……
  22. */         
  23. }
  24. });
  25. }
  26. };
  27.  
  28. module.exports = callJS;
  29. });
  30.  
  31. //注1:在cordova_plugins.js里注册一个单独的插件模块
  32. cordova.define('cordova/plugin_list', function(require, exports, module) {
  33. module.exports = [
  34. //添加:
  35. {
  36. "file": "js文件路径",
  37. "id": "插件模块",
  38. "clobbers": ["navigator.callJS"]
  39. }
  40. ]
  41. }
  42.  
  43. //在app deviceready后执行:
  44. navigator.callJS.init()

java文件:

  1. public class PluginName extends CordovaPlugin {
  2. private static CallbackContext mCallbackContext;
  3.  
  4. @Override
  5. public boolean execute(String action, final JSONArray args,
  6. final CallbackContext callbackContext) throws JSONException {
  7. if (action.equals("callJSInit")) {
  8. mCallbackContext = callbackContext; //拿到回调对象并保存
  9. //PluginResult dataResult = new PluginResult(PluginResult.Status.OK, "calljs init ready");
  10. //dataResult.setKeepCallback(true);// 非常重要
  11. //mCallbackContext.sendPluginResult(dataResult);
  12. return true;
  13. } else {
  14. return false;
  15. }
  16. }
  17.  
  18. @Override
  19. public Object onMessage(String id, Object data) {
  20. return null;
  21. }
  22.  
  23. public static void callJS(String message) {
  24. if (mCallbackContext != null) {
  25. PluginResult dataResult = new PluginResult(PluginResult.Status.OK, message);
  26. dataResult.setKeepCallback(true);// 非常重要
  27. mCallbackContext.sendPluginResult(dataResult);
  28. }
  29. }
  30. }

在其它java文件中调用js:

  1. PluginName.callJS("myinit()");

运行app就会显示"myinit"方法中的内容了。

  1. //在app deviceready后执行:

cordova混合开发:Android中native调用javascript的更多相关文章

  1. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

  2. 在 Cordova/Phonegap for Android 中包含中文文件名的页面

    在 Cordova/Phonegap for Android 中包含中文文件名的页面 本贴首发于: http://xuekaiyuan.com/forum.php?mod=viewthread& ...

  3. [Hybrid App]--Android混合开发,Android、Js的交互

    AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  4. Android中Native和H5交互

    1.概述 时至今日,H5的跨平台性越发凸显优势,一套代码适配android.ios,既能减少开发成本,又便于更新与维护.但是native的性能体验也确实更佳,尤其体现在复杂界面和频繁变化的界面上.事实 ...

  5. 在 Windows 10 上搭建 Cordova 跨平台开发 Android 环境

    目录 安装 Cordova 安装 Java 和 Android 环境 创建 Cordova 应用程序 构建和运行 Cordova Cordova 简介:Cordova 原名 PhoneGap,是一个开 ...

  6. 在 Android 中如何调用 C 语言?

    当我们的 Java 需要调用 C 语言的时候可以通过 JNI 的方式,Java Native Interface.Android 提供了对 JNI 的支持, 因此我们在 Android 中可以使用 J ...

  7. Android中WebView的JavaScript代码和本地代码交互的三种方式

    一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...

  8. android 中webview调用js

    1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true ...

  9. Android中webview跟JAVASCRIPT中的交互

    在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面 ...

随机推荐

  1. Heartbeat的两个小BUG

    1,heartbeat启动不起来 如果你是用了linux-ha.japan里面的repo文件,Yum安装pacemaker+heartbeat时. 可能会发现打了service heartbeat s ...

  2. 笔记:Hyper-V上Centos 6.5分辨率调整问题解决笔记

    最近忙的没有心情写东西,果然博客就这么长草了.今天就稍微写一点点东西吧,反正这问题挺烦的. 背景如下:为准备做redis集群实验,特在笔记本上搭建CentOS6.5的Hyper-V虚拟机. 虚拟机创建 ...

  3. Spec 网上选课

    角色定义 管理员 管理员负责向系统中添加学生和教师的个人信息以及课程信息,实现对教师.学生和课程信息的修改.删除.查询操作,并对管理员个人密码进行修改. 学生 学生具有查看待选课程信息和任课教师信息. ...

  4. Nginx学习笔记(七) 创建子进程

    Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程. 在Nginx中,master进程和worker进程 ...

  5. [自制简单操作系统] 1、从0-1到汇编再到c语言的奥秘

    目录: 1.用0-1编写最简单的操作系统 2.用汇编改写上面0-1程序 2.1 只用DB的汇编改写版  2.2 加入RESB汇编的改写版  2.3 进一步使用汇编替换0-1文件  2.4 核心程序也用 ...

  6. [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 ...

  7. [51单片机] TFT2.4彩屏3 [自制动画效果-滑块+吊钩]

    >_<:引脚和前面几个连接一样,这里做了一个实用的动画效果,模拟起重机的2维视图. #ifndef __ILI9325_H__ #define __ILI9325_H__ void ILI ...

  8. SQL Server 2014 安装小记

    一.写在前面 由于想体验下微软的Windows Azure在SQL Server数据库方面的使用,笔者花了点时间安装了一下SQL Server 2014,安装很简单,基本就是稍微做些配置即可,笔者在此 ...

  9. jenkins2 插件安装

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...

  10. paip.杀不死进程的原因--僵尸进程的解决.txt

    paip.杀不死进程的原因--僵尸进程的解决.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...