标签: rhino

如何在rhino javascript中将对象属性添加到全局对象

我在一个对象中有一些属性,我想添加到全局命名空间.在浏览器的javascript中,我可以将其添加到window对象中,如下所示:

var myObject = {
  foo : function() {
    alert("hi");
  }
  // and many more properties
};

for (property in myObject) {
  window[property] = myObject[property];
}

// now I can just call foo()
foo();
Run Code Online (Sandbox Code Playgroud)

但由于rhino没有全局窗口对象,我无法做到这一点.有没有一个等效的对象或其他方式来实现这一目标?

javascript rhino

7
推荐指数
3
解决办法
8562
查看次数

将函数从Java暴露给Rhino

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

javascript java rhino

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

在Javascript中将日期转换为字符串

我正在寻找一种方法将Javascript Date对象转换为字符串.我正在将我的网站从Ruby转换为服务器端Javascript,我正在寻找类似于strftimeRuby,C和许多其他语言的东西.

我发现有很多简单的脚本可以进行这种转换,但是如果有一种标准的方法,我宁愿不包含自定义实现.

我没有使用Javascript框架.我正在使用Mozilla Rhino,但我希望尽可能远离使用Java库,以便在实现之间轻松移动我的代码.

我希望能够指定字符串的格式,因为我想将它嵌入句子中.我希望能够在's和's上插入任意内容,并且拥有当天的全名,而不仅仅是它的缩写.所以toString()是不够的.

javascript datetime rhino

7
推荐指数
3
解决办法
5万
查看次数

合理处理JSR223 Rhino抛出的ScriptException

我开始遇到一个非常有用的JSR223脚本环境的肮脏的小秘密.

我正在使用Java 6 SE附带的内置版Rhino,通过JSR223 ScriptingEngine等访问它.

当我得到一个由我导出到Javascript环境的Java对象引起的异常时,它会ScriptingException包装一个sun.org.mozilla.javascript.internal.WrappedException包装我的真正异常(例如UnsupportedOperationException或者其他)

ScriptingExceptiongetFileName()的返回值为null,getLineNumber()的返回值为-1.但是当我查看消息和调试器时,它WrappedException具有正确的文件名和行号,它只是不通过ScriptingException的getter方法发布它.

大.现在我该怎么办?我不知道我将如何使用sun.org.mozilla.javascript.internal.wrappedException,它不是公共类.

java exception rhino jsr223

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

是否有任何提示和技巧使犀牛表现更快?

是否有任何提示和技巧使犀牛表现更快?我正在尝试使用Rhino中的uglifyJs压缩大型js文件,这需要一分多钟.在java服务器端空间中你有任何关于rhino的提示或其他选择吗?

javascript java performance rhino

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

从Java访问Rhino的原生JSON.Stringify

有没有更简洁的方法来获取Javascript对象的JSON表示而不是以下kludge?

System.out.println(((ScriptableObject) scope).callMethod(
    cx, (Scriptable) scope.get("JSON", scope), 
    "stringify", new Object[]{jsObject}));
Run Code Online (Sandbox Code Playgroud)

其中jsObject是我想要字符串化的ScriptableObject.

rhino

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

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
查看次数

调用string上的replace会抛出EvaluatorException

我正在尝试将此答案适用于regexp替换的情况:

  <scriptdef name="propertyregex" language="javascript">
     <attribute name="property"/>
     <attribute name="input"/>
     <attribute name="regexp"/>
     <attribute name="replace"/>
     <![CDATA[
       var input = attributes.get("input");
       var regex = new RegExp(attributes.get("regexp"));
       var replace = attributes.get("replace");
       var res = input.replace(regex, replace);
       project.setProperty(attributes.get("property"), res);
     ]]>
  </scriptdef>
Run Code Online (Sandbox Code Playgroud)

但是,执行该代码我总是得到一个例外:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException:
The choice of Java constructor replace matching JavaScript argument types
(function,java.lang.String) is ambiguous; candidate constructors are: 
    class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
    class java.lang.String replace(char,char)
Run Code Online (Sandbox Code Playgroud)

我怎样才能在这里做正则表达式替换?

javascript java regex ant rhino

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

捕获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
查看次数