Javascript执行器(Rhino) - 横行青海夜带刀- JavaEye技术网站

前一段时间用swing开发了sTodo( ),对swing开发GUI的基本流程算是熟悉了,所以也常用swing来写些小东西。在实际的开发或者学习中,经常遇到这样的场景:想要执行一段javascript脚本,验证一些想法,这可能需要你打开编辑器,建立一个新的html页面,然后写一堆标签,然后用script标签将脚本包起来,执行以下,整个过程比较麻烦。

?

其实javascript在web中的应用只是一部分,它最为一个语言,可以xx独立出来完成其他的工作,比如脚本化java应用等(上边提到的sTodo就内嵌了一个javascript的执行环境,用户可以自己定制或者扩展sTodo的部分功能)。JDK6中,SUN对其加入了对脚本的支持, (Google公司的Norris Boyd开发的)为纯java实现的一个javascript引擎。

?

有天在学习别人关于javascript中作用域链的文章的时候,看到作者举的例子,想自己尝试一下。于是就打开编辑器,新建了一个html文档,突然就想到为什么不设计一个小工具,直接将脚本内容(一般是与DOM无关的逻辑)写入一个输入区域,然后点击一个按钮,就可以得到自己想要的结果,这样就方便多了,于是有了se(script executor ),也就是今天要分享的东西。

?

?

上边的这个编辑器,用来输入脚本,然后点击eval按钮,可以在下边的结果框中看到结果,本例中就是计算:

这个表达式的值


在第七行,故意引入了一个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中主要用到的其他开源包有:

  • , 用以高亮显示文本,显得界面更友好
  • Console, 用以重定向System.out和System.err到JTextArea

界面很简单,主要的功能有了,不过还需要进一步实现,抽时间把load, save等完成,就比较好用了。

?

运行方式:

java -jar se.jar //需要注意的是resource目录需要和se.jar在同一级目录下。

{zx1}评论

  • 我上面所说的话,也不是十分严谨。 Object的prototype属性所指向的对象 ...
    -- by

  • 翻译过来应该是这样:原型链终止与有null原型的对象,Object的构造的默认原型 ...
    -- by

  • abruzzi 写道weiqingfei 写道另外,既然看到了,就指出来吧。 这句 ...
    -- by

  • weiqingfei 写道另外,既然看到了,就指出来吧。 这句话,你是怎么得来的? ...
    -- by

  • 另外,既然看到了,就指出来吧。这句话,你是怎么得来的?希望你再验证一下,如果是依据 ...
    -- by
郑重声明:资讯 【Javascript执行器(Rhino) - 横行青海夜带刀- JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——