JavaScript解析引擎For Java
一、需求分析:
?
?? ? ? 最近开发过程中需要用java去执行JavaScript,获得一些动态生成的东西,这就想到了JavaScript解析引擎了。
?
二、资料收集:
?
?? ? ? 目前来说用java做的解析引擎不多,下面是一个比较好的解析引擎,来自Mozilla:
?? ? ? ?http://www.mozilla.org/rhino/download.html
?光有解析引擎还是不够的,还需要完善的解决方案和api,看看开源世界为我们带来什么:
1.ladyrBrowser
?? ? ? ? ? ?https://www.ladyr.es/ladyrbrowser/wiki
这个上次提到过,一直没来得及做总结,他是一个西班牙的研究机构写的浏览器,用的技术是xulrunner和swt结合。其实核心是火狐,不过提供java的api去进行一些dom对象的操作,事件模拟,JavaScript解析和执行之类的操作。但是经过大规模的测试,不太稳定,而且容易崩溃,要使用的话估计需要修改源代码进行优化。
2.Lobo and Cobra
?? ? ? ? ? ??http://lobobrowser.org/index.jsp
?? ? ? ? ? 这是一个纯java写的浏览器,用的也是Rhino作为解析引擎,支持html,css和JavaScript和一些扩展。lobo和Cobra关注点不一样,lobo关注与对一些插件的支持,如javafx等等,而Cora关注与html的解析。所以我先选择它作为我的首选解决方案.
?
三,研究测试
?
运行lobo浏览器需要下载相关的jar包,设置classpath的时候,lobo.jar和lobo-pub.jar是必须的,然后其他的插件支持放在ext文件夹下与lobo.jar和lobo-pub.jar放在同一目录下.
?
然后运行官方的测试类:(http://lobobrowser.org/browser/api-info.jsp)
?
?
import java.awt.event.WindowEvent;import javax.swing.*;import javax.swing.border.*;import org.lobobrowser.gui.*;import org.lobobrowser.main.PlatformInit;public class BrowserPanelTest extends JFrame {public static void main(String[] args) throws Exception {// Initialize logging.PlatformInit.getInstance().initLogging(false);// This step is necessary for extensions to work:PlatformInit.getInstance().init(false, false);// Create frame with a specific size.JFrame frame = new BrowserPanelTest();frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);frame.setSize(600, 400);frame.setVisible(true);}public BrowserPanelTest() throws Exception {this.setTitle("Lobo Demo");final BrowserPanel bp = new BrowserPanel();bp.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.RAISED), "Embedded browser"));bp.navigate("http://lobobrowser.org/browser/home.jsp");this.getContentPane().add(bp);this.addWindowListener(new java.awt.event.WindowAdapter() {public void windowClosing(WindowEvent e) {// This needs to be called in order// to inform extensions about the// window closing.bp.windowClosing();}});}}?就可以看到浏览器,不过这里可能会报错,暂时还没理解清楚是什么原因,但是毕竟是能用了.
?
接下来是Cobra的解析功能(http://lobobrowser.org/cobra/getting-started.jsp)
?
?
1 楼 kjj 2009-12-25 很想看到你的后继文章,我也对此感兴趣!! 2 楼 BarryWei 2009-12-26 楼主做的测试代码,抓个效果图看看…… 3 楼 xinnn 2009-12-26 java解析js第一次听说,不知道是在什么业务场景下的,期待深度探讨 4 楼 abruzzi 2009-12-26 言之无物,文中给出的例子直接就引用自lobo的官方demo,怎么还这么多投良好贴?rhino是java版的js引擎,但是说到如何使用,怎么就戛然而止了。这个世界上的demo已经足够多了,少的是能沉下心来深入研究。