java rhino js类_如何使用Rhino将Java类中的方法添加为Javascript中的全局函数?

小编典典

我对Rhino并不是很熟悉,但是这样的方法应该可以工作:

for(var fn in utils) {

if(typeof utils[fn] === 'function') {

this[fn] = (function() {

var method = utils[fn];

return function() {

return method.apply(utils,arguments);

};

})();

}

}

只需遍历的属性utils,并为每个作为函数的属性创建一个调用它的全局函数。

编辑:我在Groovy脚本中工作了,但是我必须在绑定中而不是像您的代码那样在引擎上设置utils:

import javax.script.*

class Utils {

void foo(String bar) {

println bar

}

}

ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");

engine.eval("""

for(var fn in utils) {

if(typeof utils[fn] === 'function') {

this[fn] = (function() {

var method = utils[fn];

return function() {

return method.apply(utils,arguments);

};

})();

}

}

foo('foo'); // prints foo, sure enough

""",new SimpleBindings("utils":new Utils()))

2020-10-09

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android使用Rhino引擎调用Java方法有两种方式: 1. 通过JavaAdapter对象将Java对象转换为JavaScript对象 例如,我们有一个JavaMyClass,其有一个方法printMessage(String message),我们想在JavaScript调用这个方法。我们可以这样做: ```java // 定义MyClass public class MyClass { public void printMessage(String message) { System.out.println(message); } } // 在JavaScript调用 Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); MyClass myClass = new MyClass(); Scriptable jsMyClass = (Scriptable) context.newObject(scope, "JavaAdapter", new Object[] { scope, myClass }); Object[] args = new Object[] { "Hello, world!" }; ScriptableObject.callMethod(jsMyClass, "printMessage", args); ``` 2. 在JavaScript直接调用Java方法 我们可以在Rhino的上下文添加Java对象和方法,然后在JavaScript直接调用。例如,我们有一个MainActivity,其有一个方法showMessage(String message),我们想在JavaScript调用这个方法。我们可以这样做: ```java // 在Rhino上下文添加MainActivity对象和方法 Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); MainActivity mainActivity = this; ScriptableObject.putProperty(scope, "MainActivity", Context.javaToJS(mainActivity, scope)); Object[] args = new Object[] { "Hello, world!" }; ScriptableObject.callMethod(scope.get("MainActivity", scope), "showMessage", args); ``` 然后在JavaScript就可以这样调用: ```javascript MainActivity.showMessage("Hello, world!"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值