使用JavaXPCOM在Java应用程序中嵌入Mozilla

3 位贡献者:


XULRunner中包含了JavaXPCOM组件,允许Java代码与XPCOM对象交互。在这片文章中您将会看到,在Java中使用XPCOM对象,要比在C++中容易得多。

必要条件

  • Java 1.4.2或者更新
  • XULRunner

2006-01-16:XULRunner目前还没有官方发布版本,因此,为了能XULRunner加上JavaXPCOM一起使用,您应该马上下载1.8.0版分支的一个每夜构建。(LinuxMac OS XWindows)。下面提到的MozillaInterfaces.jar文件可以在sdk顶层文件夹中找到。

嵌入

为了在Java应用程序中嵌入Mozilla,您需要将库文件MozillaInterfaces.jar加入您的classpath中。这个库(它是SDK的一部分)提供了启动Mozilla和调用XPCOM方法所必需的接口。

要开始嵌入,我们使用Mozilla单件类提供的方法。首先,Java应用程序必须找到一个合适的XULRunner安装:

 Mozilla mozilla = Mozilla.getInstance();
 GREVersionRange[] range = new GREVersionRange[1];
 range[0] = new GREVersionRange("1.8.*", false, "1.9", false);
   // work with trunk nightly version 1.9a1  ^^
 
 try {
   File grePath = Mozilla.getGREPathWithProperties(range, null);
   LocationProvider locProvider = new LocationProvider(grePath);
   mozilla.initEmbedding(grePath, grePath, locProvider);
 } catch (FileNotFoundException e) {
   // this exception is thrown if greGREPathWithProperties cannot find a GRE
 } catch (XPCOMException e) {
   // this exception is thrown if initEmbedding failed
 }

LocationProvider是Java应用程序提供的一个类。它实现了IAppFileLocProvider接口,并且告诉XPCOM那里可以找到那些文件和目录。

initEmbedding方法启动嵌入进程,允许Java应用程序与XPCOM和Mozilla一起工作。一旦Java应用程序使用完Mozilla,就需要中止嵌入进程:

 try {
   mozilla.termEmbedding();
 } catch (XPCOMException e) {
   // this exception is thrown if termEmbedding failed
 }

与XPCOM对象一起工作

现在,Mozilla已经嵌入了,Java应用程序可以和XPCOM对象工作了。Mozilla类提供了多种方法使工作更加容易,例如getServiceManagergetComponentManager,和newLocalFile。为了在XPCOM对象中增加查询和调用的方法,JavaXPCOM允许Java应用程序传递Java类对象给XPCOM方法。

例如:

 Mozilla mozilla = Mozilla.getInstance();
 WindowCreator creator = new WindowCreator();  // implements nsIWindowCreator
 
 nsIServiceManager serviceManager = mozilla.getServiceManager();
 
 nsIWindowWatcher windowWatcher = (nsIWindowWatcher) serviceManager
   .getServiceManagerByContractID(NS_WINDOWWATCHER_CONTRACTID,
     nsIWindowWatcher.NS_IWINDOWWATCHER_IID);
 windowWatcher.setWindowCreator(creator);

在这个例子中,我们有一个叫WindowCreator的类,它实现了nsIWindowCreator接口,我们想要在Mozilla中注册它。要做到这点,我们首先获取服务管理器(service manager),通过它,我们可以获取Mozilla窗口监视器的引用。

文档标签和贡献者

向此页面作出贡献: ziyunfei, Mgjbot, Clark
最后编辑者: ziyunfei,