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