日期:2014-05-16 浏览次数:20417 次
一、需求分析:
?
?? ? ? 最近开发过程中需要用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)
?
?