无法运行Java中使用CryptoJS库的javascript

问题描述

我正在尝试用Java代码运行JS函数,但是JS函数没有执行,因为它有一些第三方库需要加载。

JsFunction.js

load('crypto-js-3.1.9/crypto-js.js');

var encrypterId = function(name) {

    var context_data = {"referralId": name};

    var secret = CryptoJS.enc.Utf8.parse(JSON.stringify(context_data))

    var encoded_referral_id = CryptoJS.enc.Base64.stringify(secret);

    return encoded_referral_id;
}

JavaCode:

public static void rundisplay() {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        try {
            engine.eval(new FileReader("./resources/JsFunction.js"));
            invocable invocable = (invocable) engine;
            Object result;
            result = invocable.invokeFunction("encrypterId","827AE1001sdsj213jasu721kkao@1sa");
            System.out.println(result);
        } catch (FileNotFoundException | NoSuchMethodException | ScriptException e) {
            e.printstacktrace();
        }
    }

例外:

javax.script.ScriptException: TypeError: Cannot load script from crypto-js-3.1.9/crypto-js.js in <eval> at line number 1
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:469)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:453)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:405)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:401)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:149)

有人可以帮助我运行此JS并返回值吗?否则可以用Java编写等效代码吗?

解决方法

我想你可以这样:

从JsFunction.js中删除“加载”行

在您的JavaCode中,紧接engine.eval(new FileReader("./resources/JsFunction.js"));之前的行中插入一行engine.eval(new FileReader("./resources/crypto-js-3.1.9/crypto-js.js"));

我相信可以将crypto-js.js文件的内容放到ScriptEngine的作用域中,随后的JsFunction.js调用应该可以工作。

我用更简单的JS文件作为测试用例做了类似的事情。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...