android通过rhino调用js

1.去rhino官网https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino下载rhino.jar,部分高版本的jar包包含了jdk1.8的内容,如果android gradle 做了以下配置

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

建议使用rhino1.7.6版本,否则高版本编译不过。

2.将下载好的jar包添加到android工程

3.以下为一个调用js函数例子,在android asset目录下添加了一个fridge.js文件,文件里面有一个函数

function firdgeJsonToShadow(fridgeJson) {...}
   public static void fridgeJsonToShadow(String fridgeJson) {

        try {
            InputStream inputStream = MyApplication.getAppContext().getResources().getAssets().open("fridge.js");
            InputStreamReader reader = new InputStreamReader(inputStream);
            org.mozilla.javascript.Context ctx = org.mozilla.javascript.Context.enter();
         //添加这一行的目的是禁止优化,因为优化后可能报错
            ctx.setOptimizationLevel(-1);
            Scriptable scope = ctx.initStandardObjects();
//            scope.put("param1", scope, "value1");
//            String jsStr = "var testFunc = function(param){ return 'testFunc...'+'param='+param }; testFunc(param1);";
            Object result = ctx.evaluateReader(scope, reader, null, 0, null);
            Object fObj = scope.get("firdgeJsonToShadow", scope);
            Function f = (Function)fObj;
//最后一个参数是传给函数的参数
            String ret = (String) f.call(ctx, scope, scope, new String[]{fridgeJson});
            reader.close();
            Log.d("","ret:"+ret);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值