Tag: rhino

从JavaScript调用@JSFunction,TypeError:找不到对象的默认值

我正在调用ScriptableObject的@JSFunction注释方法 JavaScript文件 Target = Packages.com.acme.rhino.Target; function evaluate() { var t = Target(); t.addModifier(“foobar”, 1); return t; } Java文件 public class Target extends ScriptableObject { private static final long serialVersionUID = 1L; public List modifiers = new LinkedList(); @JSConstructor public Target() { } @JSFunction public void addModifier(final String message, final int value) { modifiers.add(new Modifier(message, value)); […]

如何将JavaScript函数传递给Java方法以充当回调(Rhino)

基本上我正在尝试将javaScript函数传递给Java方法以充当脚本的回调。 我可以做到 – 有点 – 但我收到的对象是sun.org.mozilla.javascript.internal.InterpretedFunction,我没有看到调用它的方法。 有任何想法吗? 这是我到目前为止所拥有的: var someNumber = 0; function start() { // log is just an log4j instance added to the Bindings log.info(“started….”); someNumber = 20; // Test is a unit test object with this method on it (taking Object as a param). test.callFromRhino(junk); } function junk() { log.info(“called back ” […]

Rhino和并发访问javax.script.ScriptEngine

我通过javax.script API使用Rhino 1.6r2。 我知道Rhino引擎声称是MULTITHREADED: “引擎实现是内部线程安全的,脚本可以并发执行,尽管脚本执行对一个线程的影响可能对其他线程上的脚本可见。” 我想知道的是,在什么条件下,一个脚本执行的效果会对另一个脚本执行的影响? 在我的代码中,我有时会重用ScriptEngine对象,但是对于每次执行,我都会创建一个新的SimpleBindings并将其传递给eval(String, Bindings) 。 有了这种安排,内部状态是否有任何方式可以从一个执行泄漏到另一个执行? 如果是这样,怎么样? 这里有一个非常丰富的答案 ,但它并不能告诉我我需要知道什么。

如何在运行时将rhino / javascript文件编译为.class字节码

我正在用Java制作一个落砂游戏 。 我希望用户能够使用更简单的语言为其编写自己的引擎。 落砂游戏可能会占用大量CPU资源,因此我希望尽可能快地运行引擎,而无需手动编译。 我需要知道如何在运行时将rhino javascript文件编译为.class文件以供使用。 我找了一种方法,但除了使用我不希望用户必须执行的命令行手动编译之外,找不到任何方法。

为rhino构建java脚本调试器

我正在使用tomcat服务器,我添加了一个犀牛引擎,以便我的用户能够使用某些脚本function。 第二阶段是提供一些调试环境。 我知道rhino有一个调试API,但我找不到任何关于如何使用它的文档/代码示例,并围绕它构建一个调试器 有谁知道?

如何在Java中指定自己的Rhino上下文?

我正在努力确保我的Rhino脚本(在Java 6下运行)是严格的,这样如果脚本开发人员拼错了表达式,我希望抛出exception。 目前发生的事情是表达式简单地评估为“未定义”。 现在根据Mozilla org https://developer.mozilla.org/en/New_in_Rhino_1.6R6,有一些function可以在上下文中启用严格检查。 我找不到一个有效的例子。 到目前为止我所做的是编写一个类来扩展ContextFactory然后覆盖hasFeature方法。 public class ScriptContextFactory extends ContextFactory { protected boolean hasFeature(Context context, int featureIndex) { switch (featureIndex) { case Context.FEATURE_STRICT_EVAL: return true; case Context.FEATURE_STRICT_VARS: return true; } return super.hasFeature(context, featureIndex); } } 然后在Main我将我的设置为默认值。 ContextFactory.initGlobal(new ScriptContextFactory()); 我得到一个非法的州例外。 🙁 关于这是如何工作的任何想法或样本? TIA

使用Rhino而不是ScriptEngine在Java中运行Javascript代码

基于讨论将未知日期格式的字符串表示转换为Java中的Date ,我想在我的App-Engine项目中使用JavaScript Date函数。 但是,ScriptEngine不适用于App-Engine。 所以我需要一点帮助才能转换成Rhino。 这是我需要转换的ScriptEngine代码: ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine engine = scriptEngineManager.getEngineByName(“JavaScript”); String script = “var date = new Date(‘” + dateInUnknownFormat + “‘); var timestamp = date.getTime();”; engine.eval(script); long timestamp = ((Double) engine.get(“timestamp”)).longValue(); 以下没有奏效 private static long parseDateUsingRhino(String dateInUnknownFormat){ Context mozillaJsContext = Context.enter(); Scriptable scope = mozillaJsContext.initStandardObjects(); String script = “var […]

在Java上从Rhino启动jsdom

我正在跟进这个答案 : 我设法在Java上运行Rhino Engine的简单JavaScript代码。 但是当谈到D3.js时 ,例如: var svg = d3.select(“body”).append(“svg”) 正如您所见, d3要求DOM首先可用。 所以,出于这个原因, JSDOM应该是解决方案。 但是JSDOM恰好依赖于requirejs 来自RequireJs网站: r.js文件允许您运行优化器以及在Node, Rhino或xpcshell中运行模块。 然后我的Java Rhino代码如下所示: FileReader fr1 = new FileReader(“lib/r.js”); FileReader fr2 = new FileReader(“lib/jsdom.js”); engine.eval(fr1); engine.eval(fr2); 但是现在我最终出现了这样的错误: ReferenceError:未定义“arguments”。 然后我找到了这个很好的答案 : 然后我的代码看起来像这样: cx.evaluateReader(sharedScope, new FileReader(“lib/r.js”), “require”, 1, null); cx.evaluateReader(sharedScope, new FileReader(“lib/loader.js”), “loader”, 1, null); cx.evaluateReader(sharedScope, new FileReader(“lib/jsdom.js”), “loader”, 1, null); […]

Rhino Javascript:如何将Object转换为Javascript原语?

我在这个项目中使用javax.scripting和Rhino。 我有一个Java方法返回Java对象(Double,Long,Integer等)。 我想从javascript调用该方法并将结果作为Javascript基元类型引用。 但是,javacript将返回类型识别为Object。 如何强制它转换为javascript原语? 此问题与http://groups.google.com/group/mozilla.dev.tech.js-engine.rhino/browse_thread/thread/2f3d43bb49d5288a/dde79e1aa72e1301非常相似 问题是我如何获得对上下文和WrapFactory的引用? 示例代码: public class data { Double value = 1.0d; public Number get() { return value; } } public static void main(String[] args) { ScriptEngine engine = new ScriptEngineManager().getEngineByName (“rhino”); data data = new data(); try { engine.eval(“function test(data) { return data.getD(‘value1’) + 5;};”); System.out.println(“Result:” + ((Invocable)engine).invokeFunction(“test”, data)); } […]

JVM缺少Rhino

我有一个使用ScriptEngine处理一些javascript的项目,并且在我的机器上运行良好,但是当我将项目的jar发送到服务器时,我发现服务器的JVM没有内置的Rhino,当时返回null代码调用了一个 new ScriptEngineManager().getEngineByName(“javascript”); 我去了rhino的下载页面,获取了最新的版本,并从中提取了js.jar,在项目中添加了jar,但仍然有同样的问题。