mozilla
您的搜索结果

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


    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, Clark, Mgjbot
    最后编辑者: ziyunfei,