最新版本发布于2008-03-06.这是怎么回事?它还在积极发展吗?有没有替代品?
我正在使用java来运行用Rhino编写的命令行实用程序,但如果有错误,我需要将该错误返回给shell,以便处理停止.如何将错误代码从Rhino传回shell?
在我的代码中,所有脚本都包含在.js文件中.每当其中一个脚本包含错误时,我就会得到:
javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义"nonexistant".(<未知来源>#5)在第5行的<未知来源>中
我不知道的是<Unknown Source>.多个文件在一个ScriptContext中,并且很难找到错误.它看起来也很糟糕.
有没有办法用实际文件名替换<Unknown Source>?我看到的所有方法都没有支持传递File对象,所以我真的很困惑.
我想通过这个链接证明的jQuery加载到犀牛这里.但我不断收到以下错误:
line 1086: uncaught JavaScript runtime exception: TypeError: Cannot call method "importNode" of null
Run Code Online (Sandbox Code Playgroud)
我认为jQuery无法完全加载 - 但我不知道为什么.我使用的是作者在源代码管理中发布的相同index.html文件.
这是我的Rhino控制台的跟踪:
js> load( "/temp/env.js" );
js> window.location = '/temp/index.html';
/temp/index.html
js> load( "/temp/jquery.js" );
js: "/temp/jquery.js", line 1086: uncaught JavaScript runtime exception: TypeError: Cannot call method "importNode" of null
at /temp/jquery.js:1086
at /temp/jquery.js:1079
at /temp/jquery.js:16
at <stdin>:41
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我不清楚在使用(Mozilla)Rhino时如何在Javascript和Java之间转换类型的规则.
文档中有一些细节String
:
重要的是要记住Java字符串和JavaScript字符串不一样[...] Rhino在减少两种类型之间的差异方面提供了一些帮助.首先,您可以将JavaScript字符串传递给需要Java字符串的Java方法,Rhino将执行转换.实际上,我们在上一个示例中调用java.lang.String构造函数时看到了这个特性.如果java.lang.String类尚未定义它们,Rhino也会使JavaScript方法可用于Java字符串
但其他人呢?如果我将javascript Number传递给期望的Java方法int
,double
(Integer
或者Double
)它会被转换吗?怎么样long
/ Long
?(它不适合a Double
,因此不适合JS编号?
返回这些值的Java方法怎么样?
然后是Boolean
/ boolean
.是JS常量true
和false
转换,并从相应的Java值?我见过像这样的代码
java.lang.Boolean.TRUE.booleanValue()
Run Code Online (Sandbox Code Playgroud)
从JS使用,所以至少有些人认为不是.
我看过Mozilla Rhino的文档,但是如果我错过了一些明显的东西,请指出.
我正在尝试让require.js在服务器端使用Java 6和Rhino加载模块.
我能够自己加载require.js就好了.犀牛可以看到这个require()
功能.我可以说,因为Rhino抱怨说当我换成其他require()
东西时它找不到这个功能requireffdkj()
.
但是当我试图要求一个简单的JS时,就像 hello.js
var hello = 'hello';
Run Code Online (Sandbox Code Playgroud)
使用以下任一方法:
require('hello');
require('./hello');
Run Code Online (Sandbox Code Playgroud)
它不起作用.我明白了
Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.JavaScriptException: [object Error] (<Unknown source>#31) in <Unknown source> at line number 31
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:153)
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:167)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
Run Code Online (Sandbox Code Playgroud)
我把我hello.js
放在Java类路径的顶部.那也是我的地方require.js
.我试着移动到hello.js
我能想到的任何地方,包括我的硬盘驱动器的根目录,用户目录的根目录,运行我的Java应用程序的目录等等.没有任何作用.
我查看了CommonJS规范(http://wiki.commonjs.org/wiki/Modules/1.0),它说顶级ID(如hello
)从"概念模块名称空间根"解析,而相对ID(喜欢./hello
)解决调用模块.我不确定这些基线在哪里,我怀疑这是问题所在.
有什么建议?我甚至可以使用Rhino的require.js吗?
编辑:我认为我需要根据Pointy的建议在下面的评论中设置环境,我也尝试过评估r.js
.(我在评估之后尝试进行评估require.js
,之后再次进行评估require.js
.)在任何一种情况下我都会收到错误:
Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "arguments" is not defined. (<Unknown source>#19) in <Unknown source> at line number …
Run Code Online (Sandbox Code Playgroud) 最近我一直在使用Java的ScriptEngine API,即javascript引擎,它使用Rhino来处理所有事情.我总结了Rhino没有XMLHttpRequest的事实.我想知道是否有人知道可能的方法吗?
我有用JavaScript编写的业务逻辑,这个代码与其他非Android应用程序共享.
在Android中的服务中使用此JavaScript中的函数的最佳方法是什么?
AFAIK有2种选择?
关注V8/Webview,当我尝试使用任何功能访问WebView时,我得到了;
All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
Run Code Online (Sandbox Code Playgroud)
警告被注意到,它现在甚至都不起作用.当我设置webviewclient时,加载URL后我什么也得不到.
我的问题分为三部分;
1)有没有人在没有UI线程的webview中运行javascript有什么成功?
2)如何从javascript中的函数获得结果,webview界面"addJavascriptInterface"是否支持加载参数并将其发送回java?
3)如果上述任何一种情况都是不可能的......我想我会去得到Rhino,任何提示都会受到赞赏,我只看到一些博客抱怨有关在Android上运行的问题,并想知道是否有一个"转到"版本的android维护在某处.
怎么可能(如果有办法)我启动上下文而不附加当前线程?我的意思是,我实际上正在与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) rhino ×10
javascript ×6
java ×5
akka ×1
android ×1
jquery ×1
jsr223 ×1
require ×1
requirejs ×1
rhino-unit ×1
scala ×1
unit-testing ×1
xul ×1