在我的代码中,所有脚本都包含在.js文件中.每当其中一个脚本包含错误时,我就会得到:
javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义"nonexistant".(<未知来源>#5)在第5行的<未知来源>中
我不知道的是<Unknown Source>.多个文件在一个ScriptContext中,并且很难找到错误.它看起来也很糟糕.
有没有办法用实际文件名替换<Unknown Source>?我看到的所有方法都没有支持传递File对象,所以我真的很困惑.
怎么可能(如果有办法)我启动上下文而不附加当前线程?我的意思是,我实际上正在与Akka集成,我有办法保证与Akka的演员的线程亲和力,但我想减少线程数,但这样做我失去了线程亲和力,从而失去了Rhino的上下文.只是为了澄清,每个参与者都将拥有一个上下文,该上下文将负责回答针对Rhino编译代码(preStart由于代码回收而编译)的请求.
假设我有这样的代码:
class ScriptActor(script: String) extends Actor {
var scriptContext: Context = _
var scriptScope: Scriptable = _
override def receive: Receive = {
case ScriptActor.Run(env) =>
// 2: Here context's of current thread is asked with Context.getCurrentContext()
val func: RhinoFunction = scriptScope.get("$run", scriptScope)
.asInstanceOf[RhinoFunction]
val result = func.call(scriptContext, scriptScope, scriptScope, Array(env.noSpaces, signaler))
println(result)
}
override def postStop(): Unit = {
Context.exit()
super.postStop()
}
override def preStart(): Unit = {
// 1: Here context is bound to the …Run Code Online (Sandbox Code Playgroud) 在Java程序中,我正在调用用户定义的JavaScript程序:
File userJSFile=...;
javax.script.ScriptEngineManager mgr=new ScriptEngineManager();
javax.script.ScriptEngine scripEngine= mgr.getEngineByExtension("js");
Object result=scripEngine.eval(new java.io.FileReader(userJSFile));
Run Code Online (Sandbox Code Playgroud)
现在我想使用' 结果 ':我怎样才能访问它?我可以将它识别为一个数组(我可以迭代扔掉它的成员),a String,an Integer等等吗?
谢谢
编辑:我只知道我的用户给了我一个返回最后一个值的脚本.我对这个价值一无所知.它是String一个阵列等等吗?我不知道,但我想用它.
使用Java可以很容易地将对象提供给Rhino ScriptableObject.putProperty,但是有没有办法公开顶级函数?也就是说,我可以这样做,以便Rhino中的脚本可以调用foo()并调用Java代码吗?
我想在Eclipse中调试我的js代码.如何在Eclipse中设置Mozilla rhino ...(一步一步指导.
我需要帮助让CommonJS使用Java 7和Rhino 1.7R3.
Rhino 1.7R3支持CommonJS模块:
Java 7与Rhino 1.7R3捆绑在一起.不幸的是,Java 7的Rhino是一个修改版本,它不包括这个org.mozilla.javascript.commonjs包:
我想通过javax.scriptAPI 使用Rhino 1.7R3对CommonJS的支持,如下所示:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
engine.put("markdown", markdown);
engine.eval("var html = require('./Markdown.Sanitizer').getSanitizingConverter().makeHtml(markdown);");
return (String) engine.get("html");
Run Code Online (Sandbox Code Playgroud)
(我通过验证ScriptEngineManager确实使用了Rhino 1.7R3引擎.)我想也许我可以将以下依赖项添加到类路径中
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>1.7R3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
而CommonJS-特别是,require()- 将开始工作.但事实并非如此.当我尝试使用时,require()我得到了
Caused by: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "require" is not defined. (<Unknown source>#2)
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3773)
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3751)
at sun.org.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3836)
Run Code Online (Sandbox Code Playgroud)
如何让Java 7与完整版Rhino 1.7R3一起使用,以便获得CommonJS支持?
编辑:我发现了以下问题,它涉及完全相同的主题:
受访者表示也许可以用CommonJS Rhino 1.7R3替换有限的Rhino 1.7R3,但没有说明如何做到这一点.这就是我在这里问的问题.
我在android中使用Rhino在Android(java)中执行JavaScript函数代码并从此代码中获取结果,但是我得到了这个异常
01-22 11:33:57.063:E/AndroidRuntime(29175):引起:java.lang.UnsupportedOperationException:无法加载此类类文件
这是我的代码
String test = "function abc(x,y) {return x+y;}";
org.mozilla.javascript.Context context = org.mozilla.javascript.Context.enter();
try {
ScriptableObject scope = context.initStandardObjects();
Scriptable that = context.newObject(scope);
Function fct = context.compileFunction(scope, test, "script", 1, null);
Object result = fct.call(context, scope, that, new Object[] { 2, 3 });
Log.i("JML...Info", "jajajajaj = " + org.mozilla.javascript.Context.jsToJava(result, int.class));
} finally {
org.mozilla.javascript.Context.exit();
}
Run Code Online (Sandbox Code Playgroud)
我得到了方法的例外
函数fct = context.compileFunction(scope,test,"script",1,null);
我在加载webview后在方法onCreate()中编写了这段代码,并使用rhino1_7R2.jar作为Rhino的jar.
请帮助我,如果你知道任何其他方式从Android获取一个值(函数的返回值)请建议.
谢谢
我有一个Java 7程序,它加载了数千个对象(组件),每个对象都有许多参数(存储在a中Map),并在这些对象上执行各种Rhino脚本来计算其他派生参数,这些参数存储在对象中Map.在运行每个脚本之前,Scope会创建一个对象的映射支持的对象,该对象在脚本的持续时间内用作JavaScript的作用域.
举一个简单的例子,下面创建一个HashMapa = 10和b = 20,并执行脚本c = a + b,这会导致c = 30.0存储在地图中.虽然脚本看起来像是在创建一个全局变量c,但该Scope对象会捕获它并将其存储在地图中; 使用不同Scope对象执行的另一个脚本将不会看到此变量:
public class Rhino {
public static void main(String[] args) throws ScriptException {
Context cx = Context.enter();
Scriptable root_scope = cx.initStandardObjects();
Map<String, Object> map = new HashMap<>();
map.put("a", 10);
map.put("b", 20);
Scope scope = new Scope(root_scope, map);
cx.evaluateString(scope, "c = a + b", "<expr>", 0, null);
System.out.println(map); // --> …Run Code Online (Sandbox Code Playgroud) 我正在调查de.undercouch:citeproc-java:2.0.0我当前的 Android 应用程序。
我无法确定ScriptEngine适用于 Android 的citeproc-java.
我的 Gradle 类似于:-
ext {
compileSdkVersion = 30
minSdkVersion = 26
targetSdkVersion = 30
}
dependencies {
implementation 'io.apisense:rhino-android:1.1.1'
implementation 'de.undercouch:citeproc-java:2.0.0'
implementation 'org.citationstyles:styles:20.11'
implementation 'org.citationstyles:locales:20.11'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10"
}
Run Code Online (Sandbox Code Playgroud)
Citeproc要求javax.script.ScriptEngineManager在 Android 平台上不可用,因此我已替换io.apisense:rhino-android:1.1.1
我现在正面临这个例外......
2020-11-19 10:02:22.325 4426-4426/com.google.android.gms.location.sample.basiclocationsample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.android.gms.location.sample.basiclocationsample, PID: 4426
java.lang.RuntimeException: Unable to start activity ComponentInfo{----}: java.lang.IllegalArgumentException: Could not make bibliography
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) …Run Code Online (Sandbox Code Playgroud) rhino ×10
javascript ×6
java ×4
android ×2
akka ×1
citeproc-js ×1
commonjs ×1
eclipse ×1
java-7 ×1
jsr223 ×1
mozilla ×1
nashorn ×1
object ×1
require ×1
rhino-unit ×1
scala ×1
scripting ×1
unit-testing ×1
xul ×1