在Java程序中内嵌Mozilla浏览器

简介

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 浏览器部件上的用户偏好设置页面

基于 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 等)的核心。

时间: 2024-12-30 21:39:59

在Java程序中内嵌Mozilla浏览器的相关文章

教你怎样在java程序中引入neo4j数据库

随着关系型数据库在某些方面的力不从心,了解当下流行的各种数据库模式的特点和性能,无疑会给我们提供更多的选择和方向. neo4j是一种图形数据库,在遍历和关联查询方面具有突出的优势.废话少说,深入了解neo4j之前,先让我们尝试一下怎样在程序中使用neo4j. neo4j采用java语言开发,如果我们要在java程序中以内嵌方式使用neo4j,只需导入neo4j的对应包即可. 首先,我们来创建一个maven项目并修改pom.xml添加对neo4j的依赖. <?xml version="1.0

怎么用java实现程序中内置浏览器,并且能通过软件向浏览器的页面中输入字符谢谢

问题描述 怎么用java或者C++实现程序中内置浏览器,并且能通过软件向浏览器的页面中输入字符谢谢​需要用到哪些类,以及大致思路是什么?比如说,我想实现申请邮箱,可以不在浏览器上输入账号密码,想通过软件导入文本,然后自动在文本框出现导入的账号和密码,自己输入验证码后,点击确定,内置浏览器的页面上就出现了账号和密码,和验证码了,再点击提交,是点击软件上的,不点击浏览器上的,就能提交这些数据了,谢谢了!第一次发帖,想做的几个软件都是这样的..或者谁告诉我用其他的什么语言能做出来呢.谢了哈 解决方案

Java 程序中的多线程

程序|多线程 在Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应该能够编写简单的多线程程序. 为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 - 打印机.磁盘.数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含

java程序中双重检查锁定与延迟初始化

在java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化.此时程序员可能会采用延迟初始化.但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题.比如,下面是非线程安全的延迟初始化对象的示例代码: public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instanc

visual c++-Visual C++中内嵌汇编的问题

问题描述 Visual C++中内嵌汇编的问题 如下,是一个利用内嵌汇编实现的两整数交换的程序.输出结果是2,1;2,1;1,2;2,1.可以看到Swap2这个函数行不通,在函数内两个变量确实交换了,但是调用后a和b没有交换,仍然是2,1.就像是传值一样,而没有传址,令我很困惑. #include <cstdio> void Swap1(int &_int1, int &_int2); void Swap2(int &_int1, int &_int2); in

c++ dx下内嵌式浏览器

问题描述 c++ dx下内嵌式浏览器 在dx框架下做一个内嵌式的浏览器,就是程序窗口内显示网页,不用WebBrowser. 求教各位大神! 解决方案 不用webbrowser就用webkit了. 解决方案二: 用chromium,源码编译,自带有一个例子,生成一个窗口,里面加载页面.

测试了小程序的内嵌网页总结几点

11月2日深夜微信团队宣布小程序内嵌页面开放了,很多开发者已经测试了小程序的内嵌网页,他们总结了以下几点: 1.内嵌网页的域名需要在小程序管理后台设置为业务域名,也就是需要先加入白名单 一个小程序最多可以添加 20 个业务域名,且一年只可修改 50 次业务域名. 2.内嵌的网页用起来跟微信内打开体验差不多,下拉也会显示"网页由 XX 域名提供" 3.内嵌的网页可以播放视频,但是视频必须是在白名单域名内的 我测试把视频放在七牛,就无法播放,一直在加载中. 4.内嵌的网页可以嵌入 ifra

如何能在微信中内嵌一个web页面

问题描述 如何能在微信中内嵌一个web页面 想问一下如何能在微信公众平台中内嵌一个web页面呢?具体方向是什么呢?本人对这个不太懂.想咨询一下

在Java程序中运行外部类文件

程序 在Java程序中运行外部类文件 一.引言无论是用传统的编程语言(C++.VB等)还是Java语言编程,都经常需要在一个运行的程序中执行另外一个独立的外部程序.例如用Java设计一个IDE程序,那么这个IDE程序就必需能够调式.运行其它独立的外部Java程序.况且直接运行已经存在的外部程序来实现本程序的某些特定的功能,也是提高程序开发效率的一种重要手段.Java2为实现在一个Java程序中运行外部类文件(即Java程序)提供了的两种解决方案,即在同一进程中运行外部类文件和在不同进程中运行外部