无法 运行 在 JAVA 中使用 CryptoJS 库的 javascript
Unable to run the javascript that using CryptoJS library in JAVA
我正在尝试 运行 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;
}
Java代码:
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 和 return 的价值吗?否则是否可以在 Java?
中编写等效代码
我认为你可以这样做:
从 JsFunction.js
中删除 'load' 行
在您的 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 文件作为测试用例做了类似的事情。
我正在尝试 运行 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;
}
Java代码:
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 和 return 的价值吗?否则是否可以在 Java?
中编写等效代码我认为你可以这样做:
从 JsFunction.js
中删除 'load' 行在您的 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 文件作为测试用例做了类似的事情。