标签: rhino

用实际文件名替换Java Rhino(JSR223)中的<Unknown Source>

在我的代码中,所有脚本都包含在.js文件中.每当其中一个脚本包含错误时,我就会得到:

javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义"nonexistant".(<未知来源>#5)在第5行的<未知来源>中

我不知道的是<Unknown Source>.多个文件在一个ScriptContext中,并且很难找到错误.它看起来也很糟糕.

有没有办法用实际文件名替换<Unknown Source>?我看到的所有方法都没有支持传递File对象,所以我真的很困惑.

java rhino jsr223

8
推荐指数
2
解决办法
2155
查看次数

从XUL运行JavaScript代码的单元测试 - 什么和如何

我正在写一个XUL应用程序.它不是Firefox扩展,而是通过XULrunner使用的独立应用程序.我的目的是在我的开发过程中采用TDD,我将RhinoUnit视为我的单元测试框架.无论如何我会尝试使用它,但没有太多关于测试XUL应用程序的文档.有些人谈论使用UxU - 但仅限于Firefox插件 - 和Mochitest - 如果你只想测试Mozilla.

我的问题是:是否有人用单元测试编写了一些XUL应用程序?您使用了什么工具,如果是我提到过的人,您是如何使用它的?

javascript unit-testing xul rhino rhino-unit

8
推荐指数
1
解决办法
468
查看次数

Rhino:如何在没有线程关联的情况下创建上下文

怎么可能(如果有办法)我启动上下文而不附加当前线程?我的意思是,我实际上正在与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)

scala rhino akka

8
推荐指数
0
解决办法
113
查看次数

Java ScriptEngine:在Java端使用值?

在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一个阵列等等吗?我不知道,但我想用它.

javascript java scripting rhino object

7
推荐指数
2
解决办法
1万
查看次数

将函数从Java暴露给Rhino

使用Java可以很容易地将对象提供给Rhino ScriptableObject.putProperty,但是有没有办法公开顶级函数?也就是说,我可以这样做,以便Rhino中的脚本可以调用foo()并调用Java代码吗?

javascript java rhino

7
推荐指数
1
解决办法
3742
查看次数

在javascript Eclipse中配置rhino

我想在Eclipse中调试我的js代码.如何在Eclipse中设置Mozilla rhino ...(一步一步指导.

javascript eclipse mozilla rhino

7
推荐指数
1
解决办法
1982
查看次数

Java 7 + Rhino 1.7R3支持CommonJS模块?

我需要帮助让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支持?

编辑:我发现了以下问题,它涉及完全相同的主题:

完整性检查:Rhino没有require函数,对吧?

受访者表示也许可以用CommonJS Rhino 1.7R3替换有限的Rhino 1.7R3,但没有说明如何做到这一点.这就是我在这里问的问题.

javascript rhino require commonjs java-7

7
推荐指数
1
解决办法
6188
查看次数

android Rhino错误无法加载此类类文件

我在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获取一个值(函数的返回值)请建议.

谢谢

android rhino android-webview

7
推荐指数
1
解决办法
2327
查看次数

捕获Nashorn的全局变量

我有一个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)

javascript java rhino nashorn

7
推荐指数
1
解决办法
2601
查看次数

如何在 Android 上使用 citeproc-java

我正在调查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)

android rhino citeproc-js

7
推荐指数
1
解决办法
117
查看次数