Rhino: How to call JS function from Java

前端 未结 1 602
一向
一向 2020-12-04 17:16

I\'m using Mozilla Rhino 1.7r2 (not the JDK version), and I want to call a JS function from Java.

My JS function is like this:

function abc(x,y)
{
           


        
相关标签:
1条回答
  • 2020-12-04 17:53
    String script = "function abc(x,y) {return x+y;}";
    Context context = Context.enter();
    try {
        ScriptableObject scope = context.initStandardObjects();
        Scriptable that = context.newObject(scope);
        Function fct = context.compileFunction(scope, script, "script", 1, null);
        Object result = fct.call(
                context, scope, that, new Object[] {2, 3});
        System.out.println(Context.jsToJava(result, int.class));
    } finally {
        Context.exit();
    }
    

    UPDATE: when the function is loaded in the scope, along with other functions and variables

    String script = "function abc(x,y) {return x+y;}"
            + "function def(u,v) {return u-v;}";
    Context context = Context.enter();
    try {
        ScriptableObject scope = context.initStandardObjects();
        context.evaluateString(scope, script, "script", 1, null);
        Function fct = (Function)scope.get("abc", scope);
        Object result = fct.call(
                context, scope, scope, new Object[] {2, 3});
        System.out.println(Context.jsToJava(result, int.class));
    } finally {
        Context.exit();
    }
    
    0 讨论(0)
提交回复
热议问题