锁定老帖子 主题:Javascript执行器(Rhino)
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-03
引言前一段时间用swing开发了sTodo(http://code.google.com/p/stodo/ ),对swing开发GUI的基本流程算是熟悉了,所以也常用swing来写些小东西。在实际的开发或者学习中,经常遇到这样的场景:想要执行一段javascript脚本,验证一些想法,这可能需要你打开编辑器,建立一个新的html页面,然后写一堆标签,然后用script标签将脚本包起来,执行以下,整个过程比较麻烦。
其实javascript在web中的应用只是一部分,它最为一个语言,可以完全独立出来完成其他的工作,比如脚本化java应用等(上边提到的sTodo就内嵌了一个javascript的执行环境,用户可以自己定制或者扩展sTodo的部分功能)。JDK6中,SUN对其加入了对脚本的支持,Rhino (Google公司的Norris Boyd开发的)为纯java实现的一个javascript引擎。
有天在学习别人关于javascript中作用域链的文章的时候,看到作者举的例子,想自己尝试一下。于是就打开编辑器,新建了一个html文档,突然就想到为什么不设计一个小工具,直接将脚本内容(一般是与DOM无关的逻辑)写入一个输入区域,然后点击一个按钮,就可以得到自己想要的结果,这样就方便多了,于是有了se(script executor ),也就是今天要分享的东西。
效果
上边的这个编辑器,用来输入脚本,然后点击eval按钮,可以在下边的结果框中看到结果,本例中就是计算: x*2 + y*3 (x = 5, y = 6)
这个表达式的值 在第七行,故意引入了一个DOM中的函数alert, 然后脚本引擎rhino会检测到错误,并指定行号:
设计思路主要思路很简单,将编辑器中的文本整个复制起来,传输给JDK的javascript脚本引擎解释,然后重定向System.out和System.err到显示结果的JTextArea。其中比较关键的代码是,解释脚本的部分:
private Object evalScript(String script){ Object result = new Object(); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); try { result = engine.eval(script); } catch (ScriptException e) { e.printStackTrace(); } return result; } 代码很简单,这里就不写出来了,需要的可以看看附件中的代码。
其他se中主要用到的其他开源包有:
界面很简单,主要的功能有了,不过还需要进一步实现,抽时间把load, save等完成,就比较好用了。
运行方式: java -jar se.jar //需要注意的是resource目录需要和se.jar在同一级目录下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-04
LZ思路很好但是这个工具目前不太好使经常爆异常希望LZ继续完善
|
|
返回顶楼 | |
发表时间:2009-12-04
yangsheng 写道 LZ思路很好但是这个工具目前不太好使经常爆异常希望LZ继续完善
不好意思,目前只是一个原型,有时间就整理一下 |
|
返回顶楼 | |
发表时间:2009-12-04
alert(x),这个为什么会报错?
|
|
返回顶楼 | |
发表时间:2009-12-04
ziyu_1 写道 alert(x),这个为什么会报错?
rhino是一个纯java的javascript引擎,不包含DOM中的函数。alert是DOM中的window的一个函数,因此没有包含在rhino中,如果需要调试,可以使用print或者println。 |
|
返回顶楼 | |
发表时间:2009-12-04
前几天我看见有人想在java中使用jquery解析采集到html,而不想用java的htmlparser包,看了楼主的东东好像离实现那个目的不远了
|
|
返回顶楼 | |
发表时间:2009-12-04
ry.china 写道 前几天我看见有人想在java中使用jquery解析采集到html,而不想用java的htmlparser包,看了楼主的东东好像离实现那个目的不远了
jQuery的作者john就用rhino在java上实现了一个parser了,叫env.js,你可以到他的网站上看看,呵呵。 |
|
返回顶楼 | |
发表时间:2009-12-05
不错, LZ可以参考EditPlus, 我平时都是用它调试
|
|
返回顶楼 | |
发表时间:2009-12-05
楼主是准备做一个JavaScript得集成开发环境?
貌似为这种动态语言做这种环境比较麻烦 |
|
返回顶楼 | |
发表时间:2009-12-05
请问LZ 编辑器为什么不支持字体平滑效果呢,或者需要怎么设置一下?
|
|
返回顶楼 | |