当前位置:天才代写 > tutorial > JAVA 教程 > 在Java措施中内嵌Mozilla欣赏器

在Java措施中内嵌Mozilla欣赏器

2017-11-11 08:00 星期六 所属: JAVA 教程 浏览:331

副标题#e#

简介

SWT 欣赏器部件是 SWT 所提供的浩瀚部件中较为巨大的一个,它提供了在 Java 应用措施中内嵌欣赏器应用并通过 Java API 与之举办交互的本领。一个 典范的应用场景是,开拓者可以在客户段措施中嵌入一个内置欣赏器,会见特定 HTML 应用,从而集 web 技能与客户端技能两者之所长,开拓出具有更富厚成果 和界面的软件。

本文主要包括两个方面的内容:1. 如安在 Java 应用措施中内嵌基于 Mozilla 的欣赏器部件。2. 利用 JavaXPCOM bridge 定制欣赏器成果及与 XULRunner 举办更多交互。

本文中典型措施在 Mac OS 10.5, JDK1.5,XULRunner 1.8.1.3 情况下开拓 ,编译与测试。

欣赏器部件简史

SWT( The Standard Widget Toolkit)最早在 3.0 版本中引入欣赏器部件 ,早期目标是为了提供一些简朴的接口,利用户得以在 Java 措施中显示和欣赏 HTML 页面。

最早,在差异的平台上的欣赏器部件基于差异的内核,好比,在 Windows 上 基于 Internet Explorer 内核,在 Linux 上基于 Mozilla,在 Mac 上基于 Webkit 。这种机制使得 SWT 欣赏器部件气势气魄只管靠近于各个操纵系统上预装的欣赏器 (Windows 上的Internet Explorer, Linux 上的Firefox,Mac 上的Safari),但却导致了在差异平台下欣赏器部件的行为纷歧致性。好比在 Linux 上的欣赏器部件下打开 about:config 链接,你会看到 Mozilla 的用户偏好配 置页面 ( 见图 1),但在 Windows 和 Mac 的SWT 欣赏器部件将显示空缺页面 。

为了办理这种行为纷歧致的问题并对外提供统一接口,SWT 在 3.3M5 版本中 提出了 "Mozilla Everywhere" 的观念,在 Windows 上和 Mac 上也提供了基于 Mozilla 内核的欣赏器部件。并在 SWT 3.3M6 中增加了对 JavaXPCOM 的支持, 这就使得开拓者可以通过 Java 语言会见所有 Mozilla 的果真接口,从而为内 嵌欣赏器提供更机动的定制行为。

图 1. 基于 Mozilla 的SWT 欣赏器部件上的用户偏好配置页面

在Java法子中内嵌Mozilla浏览器

基于 Mozilla 的SWT 欣赏器部件

为了利用基于 Mozilla 的SWT 欣赏器部件,需要在操纵系统中预先安装与 注册 XULRunner 。那,什么是 XULRunner 呢?“ XULRunner 是一个单独的“ Mozilla 运行时”安装包,可用于启动多种如同 Firefox 和 Thunderbird 一样 富厚的XUL+XPCOM 应用措施。它提供了安装、进级和卸载这些应用措施的机制 。XULRunner 还将提供 libxul,这个办理方案答允把 Mozilla 技能嵌入到其 它项目和产物中。”(此段界说译自 https://developer.Mozilla.org/En/XULRunner)简朴来说,XULRunner 是基于 Mozilla 的欣赏器(如 Firefox,Camino 等)的焦点。


#p#副标题#e#

XULRunner 的安装与注册:

下载符合版本的XULRunner 。下载地点: http://releases.Mozilla.org/pub/Mozilla.org/XULRunner/releases。留意: 假如在 Mac 下举办开拓可能需要利用 JavaXPCOM,则需要下载 1.8.1.2 或更新 版本。

Windows: 将下载的zip 包解压到符合的文件夹,将当前目次配置为解压后 的文件夹。

Linux: 将下载的zip 包解压到符合的文件夹,将当前目次配置为解压后的文件夹。

Mac: 安装下载的dmg 文件,将当前目次配置为 XULRunner 的安装位置。( 凡是为/Library/Frameworks/XUL.framework/Versions/Current) 。

卸载之前版本的XULRunner 。假如之前没有安装过 XULRunner,可忽略这一 步。

假如之前版本的XULRunner 注册为供所有用户利用,执行如下呼吁:

Windows:XULRunner –unregister-global

Linux:sudo ./XULRunner –unregister-global

Mac: sudo ./XULRunner-bin –unregister-global

假如之前版本的XULRunner 注册为供当前用户利用,则执行呼吁:

Windows:XULRunner –unregister-user

Linux: ./XULRunner –unregister-user

Mac: ./XULRunner-bin –unregister-user

通过呼吁行注册 XULRunner 。

注册为供所有用户利用:

Windows:XULRunner –register-global

Linux:sudo ./XULRunner –register-global

Mac: sudo ./XULRunner-bin –register-global

注册为供当前用户利用:

Windows:XULRunner –register-user

Linux: ./XULRunner –register-user

Mac: ./XULRunner-bin –register-user

做完以上筹备事情后,就可以通过简朴的代码建设一个基于 Mozilla 的SWT 欣赏器部件。

清单 1. 建设一个简朴的欣赏器

Display display = new Display ();
   final Shell shell = new Shell (display);
   FillLayout layout = new FillLayout();
   shell.setLayout(layout);

  Browser browser = new Browser(shell, SWT.MOZILLA); //1
  browser.addTitleListener(new TitleListener(){ //2
   public void changed(TitleEvent event) {
    shell.setText(event.title);
     }
   });
   browser.setUrl("www.eclipse.org"); //3
   shell.open ();
   while (!shell.isDisposed ()) {
    if (!display.readAndDispatch ()) display.sleep ();
   }
  display.dispose ();

#p#副标题#e#

代码说明:

#p#分页标题#e#

建设一个 SWT 欣赏器部件,SWT.MOZILLA 样式用于指定此欣赏器部件基于 Mozilla 。假如指定 SWT.NONE,则建设默认 SWT 欣赏器部件(在差异平台上基 于差异内核)

监听欣赏器的标题事件 (TitleEvent) 。将窗口的标题配置为欣赏器页面的标题。

会见www.eclipse.org。

Browser 类提供 setUrl(),getUrl(),setText(),getText() 等一系列方 法和一系列监听器(Listener)供开拓者利用,拜见 SWT 文档。

图 2. 一个简朴的欣赏器:

在Java法子中内嵌Mozilla浏览器

JavaXPCOM

Browser 类所提供的API 在实际开拓中简直可以满意大部门的用户需求。但 是假如要扩展欣赏器的成果,提供更富厚细腻的节制,则可以利用 JavaXPCOM 举办进一步的开拓事情。

这里需要表明一下一些观念。

XPCOM:XPCOM 的英文全称是 Cross Platform Component Object Model,即 跨平台的组件工具模子。它是一种跟 COM 雷同的组件技能。所差异的是它是跨 平台的。XPCOM 体系中最重要的根基观念是接口(Interface),组件 (Component) 和处事(Service) 。接口界说成果,组件可以实现多个接口的功 能,组件实现的改变不影响成果。处事则可以被认为是一种单态的组件。也就是 说,XULRunner 的根基构成单位是 XPCOM 组件,它由很多 XPCOM 组件拼接而成 ,这些组件之间通过接口彼此挪用,协同完成欣赏器的各种成果。

XULRunner 基于 XPCOM 的本质,使得 Mozilla 有着很强的扩展性和可定制 性。

JavaXPCOM:顾名思义,JavaXPCOM 就是 Java 与 XPCOM 的桥梁。JavaXPCOM 答允在 Java 和 XPCOM 间举办会话,这样一来,Java 应用措施就可 以会见 XPCOM 工具,而且 XPCOM 也可以会见任何实现了 XPCOM 接口的Java 类。借助 JavaXPCOM,开拓者可以在 Java 应用措施中同 XPCOM 或嵌入的Gecko 对话。JavaXPCOM 和 XPConnect(JavaScript-XPCOM 桥)十分相似,并 且利用 XPIDL 实现其成果。

为了在 SWT 中利用 JavaXPCOM,我们需要做一些筹备事情:下列步调引自 http://www.eclipse.org/swt/faq.php#howusejavaxpcom

在 eclipse 中运行措施:

下载 org.Mozilla.xpcom plugin

导入 eclipse workspace

插手开拓中的plugin 的required plugin 列表中。

独立运行的措施:

下载平台所需的XULRunner SDK

将lib/MozillaInterfaces.jar插手你的措施的Java build path 。

在 SWT 中,假如你建设了一个基于 Mozilla 的SWT 欣赏器部件,且 MozillaInterface.jar 在 classpath 中,则于 JavaXPCOM 的初始化事情会在 欣赏器部件的建设进程通过反射自动完成。用户可以直接利用 JavaXPCOM 的所 有成果。

#p#副标题#e#

如下代码显示了如何利用JavaXPCOM:

示例 1

本例展示了如何通过 JavaXPCOM 编程改变欣赏器文档中 DOM 结点的内容。(完整示例措施见附录)。

清单 2. 通过 JavaXPCOM 改变欣赏器中 DOM 结点的内容

nsIWebBrowser webBrowser = (nsIWebBrowser) browser.getWebBrowser(); //1
  if (webBrowser == null) {
  System.out.println("Could not get the nsIWebBrowser from  the Browser widget");
  return false;
  }

  nsIDOMWindow window = webBrowser.getContentDOMWindow();  //2
  nsIDOMDocument document = window.getDocument(); //3
  nsIDOMElement list= document.getElementById("input1"); //4
  list.setAttribute("value", "value after change");  //5

代码说明:

Browser 类提供了一个很是重要的要领 getWebBrowser(), 通过它,用户可 以会见到 XPCOM 接口 nsIWebBrowser,nsIWebBrowser 是 XULRunner 中一个十 分重要的组件,通过它,开拓者可以获取欣赏器的DOM 窗口,进而获取整个 DOM 树的内容并对其举办修改。

获取欣赏器 DOM 窗口。

从 DOM 窗口获取 DOM 文档。

获取 id 为 input1 的DOM 结点。

修改 DOM 结点的属性。点击按钮后,文本框中的字符串将被改变为“ value after change ” 。

图 3. 用 JavaXPCOM 改变欣赏器中 DOM 结点的内容

在Java法子中内嵌Mozilla浏览器

示例 2

基于 Mozilla 的欣赏器的用户偏好配置可以通过在欣赏器中输入 about:config 会见到(见本文图一)。这些偏好配置可以通过编程改变。示例 二展示了通过JavaXPCOM为欣赏器组件配置用户署理的进程。(完整示例措施见 附录)

清单 3. 通过 JavaXPCOM 为欣赏器组件配置用户署理

#p#分页标题#e#

Mozilla Mozilla = Mozilla.getInstance();  //1
nsIServiceManager serviceManager = Mozilla.getServiceManager();   //2
String contractID = "@Mozilla.org/preferences-service;1";
nsIPrefService prefService = (nsIPrefService)  serviceManager.getServiceByContractID(
contractID, nsIPrefService.NS_IPREFSERVICE_IID);  //3
       // Get a branch to access to the entire  preference tree
  nsIPrefBranch branch = prefService.getBranch("");  //4
  branch.setCharPref("network.proxy.http", "127.0.0.1");   //5
  branch.setIntPref("network.proxy.http_port", 8080);   //6

代码说明:

获取 Mozilla 类的单态实例。

获取 Mozilla 的处事打点器。Mozilla 的处事打点器认真打点处事组件 ,开拓者可以通过契约 ID(contract ID)向 Mozilla 请求相对应的处事。

通过用户设置打点的契约 ID “ @Mozilla.org/preferences-service;1 ”获 取设置打点处事。

#p#副标题#e#

在设置树中获取打点 proxy 的分支。

配置 ProxyIP 。

配置 Proxy 端口。

配置完成后,通过about:config链接可以查察修悔改的proxy配置。

图 4. 通过 JavaXPCOM 为欣赏器组件配置用户署理

在Java法子中内嵌Mozilla浏览器

利用 XUL: 充实操作基于 Mozilla 的SWT 欣赏器部件的长处

XUL(XML User Interface Language)用 XML 来标志用户界面,且提供了一 套通用控件供开拓者利用。基于 Mozilla 的欣赏器可以象渲染普通的HTML 文 件一样渲染 XUL 文件。因此,通过基于 Mozilla 的SWT 欣赏器部件,除了可 以在应用中嵌入除了普通的HTML 页面外,还可以在应用中嵌入 XUL,到达快速 开拓,充实操作各类开拓技能的目标。

关于 XUL 的更多常识,请参阅 https://developer.Mozilla.org/en/XUL

下面用一个简朴的例子演示 XUL 的利用:

清单 4. 一个简朴的XUL 文件

<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet href="chrome://global/skin/" type="text/css"? >
  <window title="Calculator" style="width:145px"
    xmlns="http://www.Mozilla.org/keymaster/gatekeeper/there.is.only.xul"& gt;
  <vbox>
   <textbox id="anzeige" readonly="true"  value="123456789" />
   <grid>
   <rows>
    <row align="center">
    <button label="7" />
    <button label="8" />
    <button label="9" />
    <button label="+" />
    </row>
    <row align="center">
    <button label="4" />
    <button label="5" />
    <button label="6" />
    <button label="-" />
    </row>
    <row align="center">
    <button label="1" />
    <button label="2" />
    <button label="3" />
    <button label="*" />
    </row>
    <row align="center">
    <button label="0" />
    <button label="," />
    <button label="=" />
    <button label="/" />
    </row>
   </rows>
   </grid>
  </vbox>
  </window>

把这段代码生存成 xul 后缀名的文件。通过基于 Mozilla 的SWT 欣赏器部 件会见 XUL 文件,可以看到如图所示的界面:

图 5. XUL 文件在欣赏器中的显示

在Java法子中内嵌Mozilla浏览器

总结:利用基于 Mozilla 的欣赏器部件的优缺点:

利益:在各个平台上提供统一的行为。提供对 XUL(XML User Interface Language) 的支持。可通过 JavaXPCOM 提供对欣赏器行为的定制和扩展。

缺点:需要在系统中预装 XULRunner 。

本文配套源码

 

    关键字:

天才代写-代写联系方式