cordova混合开发:Android中native调用javascript

Posted Sandheart----享受学习的过程,品味成功的喜悦!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.define("插件ID", function(require, exports, module) {
var exec = require(‘cordova/exec‘);
    window.callJSInit = 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);
        ……
        */         
            }
        });
    }
});

//在app deviceready后执行:
callJSInit()

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"方法中的内容了。

以上是关于cordova混合开发:Android中native调用javascript的主要内容,如果未能解决你的问题,请参考以下文章

Android混合开发该怎么搞

如何在android studio中cordova的混合开发

cordova混合App开发:Cordova+Vue实现Android APP开发 (打包及调试)

使用 Cordova 进行混合移动应用程序开发

angular使用cordova混合开发

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 MethodChannel 通信 )