今天学习怎么在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的更多相关文章

  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. 1.一起来学hibernate之hibernate简介

    一.简介 Hibernate,是一个开源的ORM框架.所谓的ORM,即object relative mapping,就是对象关系映射. 那什么是对象关系映射? 对象,即java类,又称为实体类,对象 ...

  2. Data层相关问题 & JS循环取值

    第一次写博客,里面是自己工作中碰到的问题及总结的知识点,便于自己以后回顾,技术大牛们请直接忽略这篇文章,也希望能帮助到想我这样的小白! Data层相关问题总结: 1. 代码管理用的是 VSS 2005 ...

  3. EJDB 1.1.18 发布,嵌入式JSON数据库

    EJDB 1.1.18 增加对 MongoDB 操作符 $and 和 $or 的支持,支持 MongoDB 的 $ 推断操作符,修复了 $fields 提示的bug,提升了查询处理的性能. EJDB ...

  4. ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)

    在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6) ",体验了1-6关键环节,本篇继续. ⑦根据IsapiWorkerRequest对象,HttpRun ...

  5. 【WPF】提高InkAnalyer手写汉字识别的准确率

    最近项目中需要用到一个手写键盘,我们使用了WPF的InkCanvas+InkAnalyer来开发. 按照文档,一般的代码写法如下: var analyzer = new InkAnalyzer(); ...

  6. [C++] 井字棋游戏源码

    TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...

  7. javascript跨域通信(二):window.name实现的跨域数据传输

    首先了解一下window.name这个东西是什么. name 在浏览器环境中是一个全局/window对象的属性,当在 frame 中加载新页面时,name 的属性值依旧保持不变 并且name 属性仅对 ...

  8. JavaScript简洁继承机制实现(不使用prototype和new)

    此方法并非笔者原创,笔者只是在前辈的基础上,加以总结,得出一种简洁实用的JavaScript继承方法. 传统的JavaScript继承基于prototype原型链,并且需要使用大量的new操作,代码不 ...

  9. WEBAPP开发技巧总结

    自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程序,运行在高端的移动终端设备). 开发者们都知道在高端智能手机 ...

  10. Ubuntu命令--CURL用法

    curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数curl命令参数很多,这里只列出我曾 ...