- 浏览: 636706 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- 生活 (2)
- c# (37)
- 技术 (3)
- 400电话 (0)
- 400常见问题 (0)
- 400资费 (0)
- html (7)
- css (0)
- 数据库 (7)
- javascript (16)
- php (33)
- asp.net mvc2 (10)
- mysql (9)
- C# 3.0 LinQ (10)
- vs2005或vs2008 (4)
- flash and as3 (7)
- fms (1)
- dedeCMS (11)
- java (33)
- j2me (1)
- swing (1)
- c++ (1)
- jquery easyui (3)
- jquery (5)
- android (29)
- MongoDB (9)
- VtigerCRM (1)
- test (0)
- linux (30)
- nutch (2)
- SqlServer数据库 (2)
- 数据检索 (2)
- java抓取 (11)
- 乐天 (1)
- 淘宝 (1)
- Silverlight4.0 (6)
- sphinx实时索引 (5)
- ecshop (9)
- codeigniter(CI) (3)
- axure6 (1)
- 京东店铺装修教程 (2)
- xpath (1)
- joomla (2)
- bpm (1)
- Bootstrap (2)
- knockout (4)
- ecstore (4)
- css3 (1)
- 微信 (2)
- dede (0)
- soa_edi (1)
- odoo (0)
- web (1)
最新评论
-
骑着蜗牛超F1:
在ie6下报了个stack overflow at line ...
兼容ie6和ie7 的16进制码流在html中显示为图片代码(base64) -
冰之海洋:
好像少了一句代码吧? FloatingFunc.show(th ...
android 一直在最前面的浮动窗口效果 -
yanzhoupuzhang:
连接有问题!
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000) -
whatable:
唉,楼主你都没有搞清楚重量级和轻量级。。。。既然引用了SWT, ...
java swing 内置浏览器打开网页显示flash图表-swt Browser应用 -
yy_owen:
我晕啊,你链接的什么内容额,我要的iis,你链接个视频什么意思 ...
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000)
package es.ladyr.javaxpcom.browser; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.ProgressEvent; import org.eclipse.swt.browser.ProgressListener; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.mozilla.interfaces.*; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.SWTError; public class SimpleBrowser { public static void main(String args[]) { final Browser browser; Display display = new Display(); Shell shell = new Shell(display); shell.setSize(800, 600); shell.open(); //Initiating the browser using SWT try { browser = new Browser(shell, SWT.MOZILLA); } catch (SWTError e) { System.out.println("Could not instantiate Browser: " + e.getMessage()); return; } // Adapt browser size to shell size browser.setBounds(shell.getClientArea()); // Load an URL into the web browser browser.setUrl("http://www.google.com"); // Listens for page loading status. browser.addProgressListener(new ProgressListener() { public void changed(ProgressEvent event) { } public void completed(ProgressEvent event) { nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser(); nsIDOMWindow window = webBrowser.getContentDOMWindow(); nsIDOMDocument document = window.getDocument(); System.out.println(document); } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } }
4 在java代码里嵌入Firefox3
现在可以去用一下有用的例子了。首先我们在一个java程序里使用SWT来嵌入一个Mozilla浏览器。现在,我们可以使用
org.eclipse.swt.browser.Browser类来实例化:browser = new Browser(shell, SWT.MOZILLA); 在这之前,我们需要使用ATF项目
,以及一下ATF插件。非常幸运,现在我们不需要这些补丁了。
4.1 配置环境
为了在java程序里嵌入Mozilla浏览器,我们需要使用SWT来创建窗口和嵌入浏览器。
4.1.1 安装swt
下载对应操作系统的swt,加到classpath就好了
4.1.2 配置swt
运行后面例子需要的jar包:
javaxpcom.jar
MozillaInterfaces.jar
MozillaGlue.jar
swt.jar
src.zip
4.2 Web Browser例子
接下来,我们将增加一下SWT widgets来实现通常的交换,比如输入url,前进与后退,菜单,和两种类型:
传入一个参数制定XULRunner的路径
不传入参数使用系统安装的XULRunner
package es.ladyr.javaxpcom.browser; import java.io.IOException; import java.io.InputStream; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.ProgressEvent; import org.eclipse.swt.browser.ProgressListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class LadyrBrowser { private static final int WIDTH = 800; private static final int HEIGHT = 600; Browser browser; private Combo uriCombo; private final ToolItem backItem; private final ToolItem forwardItem; /** * * @param xulrunnerPath if you have a XULRunner valid version in your system, but not * installed, you can use that version to run the browser. This param must contain * its path, or null in other case. */ public LadyrBrowser(String xulrunnerPath) { Display display = new Display(); Shell shell = new Shell(display); shell.setSize(WIDTH, HEIGHT); GridLayout gridLayout = new GridLayout(1, true); shell.setLayout(gridLayout); // Set the menu bar // create the menu Menu menuBar = new Menu(shell, SWT.BAR); // create a file menu and add an exit item final MenuItem file = new MenuItem(menuBar, SWT.CASCADE); file.setText("&File"); final Menu filemenu = new Menu(shell, SWT.DROP_DOWN); file.setMenu(filemenu); final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH); exitMenuItem.setText("&Exit/tCTRL+E"); exitMenuItem.setAccelerator(SWT.CTRL + 'E'); exitMenuItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { System.exit(0); } }); // create a Help menu and add an about item final MenuItem helpMenuItem = new MenuItem(menuBar, SWT.CASCADE); helpMenuItem.setText("&Help"); final Menu helpmenu = new Menu(shell, SWT.DROP_DOWN); helpMenuItem.setMenu(helpmenu); final MenuItem aboutMenuItem = new MenuItem(helpmenu, SWT.PUSH); aboutMenuItem.setText("&About"); shell.setMenuBar(menuBar); // Set the toolbar ToolBar toolbar = new ToolBar(shell, SWT.FLAT); backItem = new ToolItem(toolbar, SWT.PUSH); backItem.setImage(getImage("resources/back.png")); backItem.setEnabled(false); forwardItem = new ToolItem(toolbar, SWT.PUSH); forwardItem.setImage(getImage("resources/forward.png")); forwardItem.setEnabled(false); backItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (browser.isBackEnabled()) { browser.back(); } } }); forwardItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (browser.isForwardEnabled()) { browser.forward(); } } }); final ToolItem refreshItem = new ToolItem(toolbar, SWT.PUSH); refreshItem.setImage(getImage("resources/refresh.png")); refreshItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { browser.refresh(); } }); final ToolItem stopItem = new ToolItem(toolbar, SWT.PUSH); stopItem.setImage(getImage("resources/stop.png")); stopItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { browser.stop(); } }); uriCombo = new Combo(toolbar, SWT.NONE); uriCombo.setItems(new String[] { "www.ladyr.com", "www.urjc.es", "www.mozilla.org" }); uriCombo.setText("http://www.google.es"); uriCombo.setBounds(0, 0, 3 * (WIDTH / 4), 0); uriCombo.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Combo c = (Combo) e.widget; browser.setUrl(c.getText()); System.out.println(c.getText()); } public void widgetDefaultSelected(SelectionEvent e) { Combo c = (Combo) e.widget; browser.setUrl(c.getText()); System.out.println(c.getText()); } }); final ToolItem uriComboItem = new ToolItem(toolbar, SWT.SEPARATOR); uriComboItem.setWidth(uriCombo.getSize().x); uriComboItem.setControl(uriCombo); final ToolItem goItem = new ToolItem(toolbar, SWT.PUSH); goItem.setImage(getImage("resources/go.png")); goItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { browser.setUrl(uriCombo.getText()); } }); GridData data = new GridData(); data.horizontalAlignment = SWT.FILL; toolbar.setLayoutData(data); toolbar.pack(); // Set the page visualization area Canvas canvas = new Canvas(shell, SWT.BORDER); data = new GridData(); // Set the same dimensions than shell, after we will call pack method // to fit the canvas size to the shell size. data.horizontalAlignment = SWT.FILL; data.verticalAlignment = SWT.FILL; data.widthHint = WIDTH; data.heightHint = HEIGHT; canvas.setLayoutData(data); shell.pack(); shell.open(); // Browser code initMozillaBrowser(uriCombo.getText(), canvas, xulrunnerPath); // End of browser code while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } /** * * @param uri * @param canvas * @param xulrunnerPath if you have a XULRunner valid version in your system, but not * installed, you can use that version to run the browser. This param must contain * its path, or null in other case. */ private void initMozillaBrowser(String uri, Canvas canvas, String xulrunnerPath) { browser = new Browser(canvas, SWT.MOZILLA); //nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser(); browser.setBounds(canvas.getClientArea()); browser.setUrl(uri); browser.addProgressListener(new ProgressListener() { public void changed(ProgressEvent event) { uriCombo.setText(browser.getUrl()); updateToolItemsState(); } public void completed(ProgressEvent event) { updateToolItemsState(); } }); } private Image getImage(String path) { InputStream sourceStream = this.getClass().getResourceAsStream(path); ImageData source = new ImageData(sourceStream); Image image = new Image(null, source); try { sourceStream.close(); } catch (IOException e) { e.printStackTrace(); } return image; } private void updateToolItemsState() { if (!backItem.isEnabled() && browser.isBackEnabled()) { backItem.setEnabled(true); } else if (backItem.isEnabled() && !browser.isBackEnabled()) { backItem.setEnabled(false); } if (!forwardItem.isEnabled() && browser.isForwardEnabled()) { forwardItem.setEnabled(true); } else if (forwardItem.isEnabled() && !browser.isForwardEnabled()) { forwardItem.setEnabled(false); } } public static void main(String[] args) { if (args.length > 0) { new LadyrBrowser(args[0]); } else { new LadyrBrowser(null); } } }
5. 在浏览器里访问JavaXPCOM
这一节里我们将讨论一下通过WebBrowser访问的功能。比如,改变浏览器的属性或者观察浏览器请求与响应。
首先我们改变用户的preferences
注:我只列出增加的部分代码。
public class SimpleBrowserWithPrefs { // Obtain preferences service String contractID = "@mozilla.org/preferences-service;1"; nsIPrefService prefService = (nsIPrefService) serviceManager .getServiceByContractID(contractID, nsIPrefService.NS_IPREFSERVICE_IID); // Get a branch to access to the entire preference tree nsIPrefBranch branch = prefService.getBranch(""); // Set some preferences // Warn before submitting a form to an insecure area ? -> False branch.setBoolPref("security.warn_submit_insecure", 0); // Select direction of text: // 1 : Left-to-right // 2 : Right-to-left branch.setIntPref("bidi.direction", 2); // Allow current document to specify colors to use? // (If false, background images will also not be loaded) branch.setBoolPref("browser.display.use_document_colors", 0); }
另外一下Service也能被使用。我们已经可以改变Mozilla的属性来改变浏览器的行为,但是通过利用Service我们可以完成更有用的
任务。在下面的例子里我们将观察浏览器的请求和响应。在XPCOM里存在一个接口叫nsIObserver,它运行观察一个topic相关的event
,只要它被添加到observer Service里了。添加的方法是使用 void nsIObserverService.addObserver(nsIObserver anObserver,
String aTopic, boolean ownsWeak) 这个方法对一个特定的topic注册一个listener。anObserver是用来接受通知的一个接口,
aTopic是通知的topic,ownsWeak当nsIObserverService hold anObserver的一个strong的引用时设为false,否则设置为true。因此
,为了创建一个observer,我们必需实现nsIObserver接口,这个接口包含了一个方法 public void observe(nsISupports
aSubject, String aTopic, String aData)。
下面的例子的4个步骤:
1,获得Service Manager
2,获得Observer Service
3,创建一个简单的HTTP observer
4,把这个observer添加到监听请求和响应的Service里
package es.ladyr.javaxpcom.browser; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.ProgressEvent; import org.eclipse.swt.browser.ProgressListener; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.mozilla.xpcom.Mozilla; import org.mozilla.interfaces.*; public class SimpleBrowserWithObserver { public SimpleBrowserWithObserver(String xulrunnerPath) { final Browser browser; Display display = new Display(); Shell shell = new Shell(display); shell.setSize(800, 600); shell.open(); // If you have XULRunner installed, you can call the constructor without // the last parameter: // // final MozillaBrowser browser = new MozillaBrowser(shell,SWT.BORDER); // // That last parameter is the path for XULRunner files // (where you have uncompressed downloaded XULRunner package). try { browser = new Browser(shell, SWT.MOZILLA); } catch (SWTError e) { System.out.println("Could not instantiate Browser: " + e.getMessage()); return; } // Get ServiceManager nsIServiceManager serviceManager = Mozilla.getInstance().getServiceManager(); // Get Observer Service nsIObserverService observerService = (nsIObserverService) serviceManager .getServiceByContractID("@mozilla.org/observer-service;1", nsIObserverService.NS_IOBSERVERSERVICE_IID); // Create a simple HTTP observer SimpleHTTPObserver httpObserver = new SimpleHTTPObserver(); // Add our observer to the service for listen to request and responses observerService.addObserver(httpObserver, "http-on-modify-request", false); observerService.addObserver(httpObserver, "http-on-examine-response", false); // Adapt browser size to shell size browser.setBounds(shell.getClientArea()); // Load an URL into the web browser browser.setUrl("http://www.google.com"); // Listens for page loading status. browser.addProgressListener(new ProgressListener() { public void changed(ProgressEvent event) { } public void completed(ProgressEvent event) { nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser(); if (webBrowser == null) { System.out.println("Could not get the nsIWebBrowser from the Browser widget"); } nsIDOMWindow window = webBrowser.getContentDOMWindow(); nsIDOMDocument doc = window.getDocument(); System.out.println(doc); } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } observerService.removeObserver(httpObserver, "http-on-modify-request"); } public static void main(String args[]) { String xulrunnerPath = null; if ( args.length > 0 ) { xulrunnerPath = args[0]; } new SimpleBrowserWithObserver(xulrunnerPath); } /** * Simple HTTP observer listen to requests and responses. * * @author alpgarcia * */ class SimpleHTTPObserver implements nsIObserver { private int nRequests = 0; private int nResponses = 0; public void observe(nsISupports aSubject, String aTopic, String aData) { // You can read corresponding javadoc for this method, here we have pasted // some interesting lines from there: // // Observe will be called when there is a notification for the topic. // This assumes that the object implementing this interface has been registered // with an observer service such as the nsIObserverService. // If you expect multiple topics/subjects, the impl is responsible for filtering. // // You should not modify, add, remove, or enumerate notifications in the // implemention of observe. // Get the channel for listen to from notification specific interface pointer. nsIHttpChannel httpChannel = (nsIHttpChannel) aSubject.queryInterface(nsIHttpChannel.NS_IHTTPCHANNEL_IID); // Our observer can listen to request or responses, it depends on the // notification topic or subject. if (aTopic.equals("http-on-modify-request")) { nRequests++; System.out.println("/n---- BEGIN REQUEST NUMBER " + nRequests + " ----/n"); httpChannel.visitRequestHeaders(new nsIHttpHeaderVisitor() { public void visitHeader(String header, String value) { System.out.println("Header: " + header + " -- Value: " + value); } public nsISupports queryInterface(String arg0) { return null; } }); System.out.println(" Method: " + httpChannel.getRequestMethod()); System.out.println(" Name: " + httpChannel.getName()); System.out.println(" Host: " + getRequestHeader(httpChannel, "host")); System.out.println(" User Agent: " + getRequestHeader(httpChannel, "user-agent")); System.out.println(" Accept: " + httpChannel.getRequestHeader("accept")); System.out.println(" Accept Language: " + getRequestHeader(httpChannel, "accept- language")); System.out.println(" Accept Encoding: " + getRequestHeader(httpChannel, "accept- encoding")); System.out.println(" Accept Charset: " + getRequestHeader(httpChannel, "accept- charset")); System.out.println(" Keep Alive: " + getRequestHeader(httpChannel, "keep-alive")); System.out.println(" Connection: " + getRequestHeader(httpChannel, "connection")); System.out.println(" Cookie: " + getRequestHeader(httpChannel, "cookie")); System.out.println("/n---- END REQUEST NUMBER " + nRequests + " ----/n"); } else if (aTopic.equals("http-on-examine-response")) { nResponses++; System.out.println("/n---- BEGIN RESPONSE NUMBER " + nResponses + " ----/n"); httpChannel.visitResponseHeaders(new nsIHttpHeaderVisitor() { public void visitHeader(String header, String value) { System.out.println("Header: " + header + " -- Value: " + value); } public nsISupports queryInterface(String arg0) { return null; } }); System.out.println(" Status: " + httpChannel.getResponseStatus()); System.out.println(" Status Text: " + httpChannel.getResponseStatusText()); System.out.println(" Content Type: " + httpChannel.getContentType()); System.out.println(" Content Length: " + httpChannel.getContentLength()); System.out.println(" Content Encoding: " + getResponseHeader(httpChannel, "content -encoding")); System.out.println(" Server: " + getResponseHeader(httpChannel, "server")); System.out.println("/n---- END RESPONSE NUMBER " + nResponses + " ----/n"); } } public nsISupports queryInterface(String uuid) { return Mozilla.queryInterface(this, uuid); } private String getRequestHeader(nsIHttpChannel httpChannel, String header) { try { return httpChannel.getRequestHeader(header); } catch (Exception e) { return "Header Not Found"; } } private String getResponseHeader(nsIHttpChannel httpChannel, String header) { try { return httpChannel.getResponseHeader(header); } catch (Exception e) { return "Header Not Found"; } } }
发表评论
-
Java和C#运行命令行并获取返回值 运行bat文件
2015-08-04 10:45 1340Java运行命令行的例子 import java.io.B ... -
C#和java调用phantomjs采集ajax加载生成的网页
2015-08-04 09:58 4328日前有采集需求,当我把所有的对应页面的链接都拿到 ... -
数据结构之BloomFilter
2014-12-04 10:12 1725BloomFilter是什么? Bloo ... -
在XULRunner中获得Cookie
2012-04-20 11:22 1188最近在看browser嵌入,找到XULRunner,http: ... -
XULRunner with Java: JavaXPCOM Tutorial 5
2012-04-13 17:03 12817.3 点击Element和填写表单 我们可以安全的 ... -
XULRunner with Java: JavaXPCOM Tutorial 4
2012-04-13 17:04 13967. 用JavaXPCOM来自动浏览网页 在这一节里我 ... -
XULRunner with Java: JavaXPCOM Tutorial 3
2012-04-06 11:07 12206 加载页面的W3C DOM访问 6.1 mozdom4ja ... -
XULRunner with Java: JavaXPCOM Tutorial 1
2012-04-06 11:03 1765这篇教程更新于2008年夏 ... -
SWT可交互式Browser控件
2012-04-06 10:55 3060在许多平台中,Browser控件皆被作为一个必需的控件给出,并 ... -
java应用程序中嵌入浏览器总结
2012-04-06 10:53 1902java应用程序中嵌套浏 ...
相关推荐
2. **设置环境变量**:为了使系统能够识别并调用XULRunner,你需要将安装路径添加到系统环境变量`PATH`中。在Windows中,可以通过以下步骤操作: - 右键点击“我的电脑”或“此电脑”,选择“属性”。 - 在“高级...
该项目包含有助于破解脚本。 如何为Mer配置开发环境 用于嵌入式设备的Gecko引擎开发非常耗资源。 如果要尝试,最好有一台运行...# -*-mic2-options-*- --arch=armv7hl -*-mic2-options-*- lang en_US.UTF-8 keyboard u
2. **设置环境变量**:为了让Java应用能够找到XULRunner,你需要设置系统环境变量,指向XULRunner的安装目录。这通常涉及到`XULRUNNER_PATH`环境变量的设置。 3. **导入相关库**:在Java代码中,你需要引入必要的库...
2. **集成到Java项目**:将XULRunner库添加到Java项目的类路径中,以便在运行时调用。 3. **编写Java代码**:使用特定的API,如XPCOM(交叉平台组件对象模型),与XULRunner进行交互,创建并控制浏览器窗口。 4. **...
《XULRunner 41.0.2 SDK:构建NPAPI插件的基石》 XULRunner,全称为“XML User Interface Library Runner”,是Mozilla基金会开发的一个开源软件框架,主要用于运行使用XUL(XML User Interface Language)和其他...
《XULRunner:Firefox浏览器内核的深度解析》 XULRunner,全称为“XML User Interface Library Runner”,是Mozilla基金会开发的一个开源软件框架,用于运行使用XUL(XML User Interface Language)界面描述语言...
XULRunner 10.0.4 ESR版本提供了稳定性和安全性,而DJNativeSwing则增强了Java应用在用户界面方面的表现。对于需要在Windows环境中开发或运行使用XUL和Swing技术的Java应用的开发者来说,这是一个必不可少的资源。
2. **应用配置**:开发者需要在应用程序中指定使用的XULRunner版本,这通常是通过设置环境变量或者配置文件实现的。 3. **应用程序开发**:使用XUL和JavaScript编写应用程序的界面和逻辑。XUL允许开发者用XML定义...
2. **Firefox关联**:Firefox浏览器是XULRunner的主要应用场景,XULRunner为Firefox提供了运行时环境,包括渲染引擎、网络通信模块、安全组件等,使得Firefox能够独立于操作系统环境运行。 3. **Aptana Studio**:...
2. **Runtime环境**:XULRunner作为一个运行时环境,负责解析和执行XUL文档,处理与用户交互,以及管理应用程序的生命周期。 3. **SDK组件**:XULRunner SDK包含头文件、库文件、示例代码、文档和构建工具,帮助...
org.eclipse.swt.SWTError: No more handles [MOZILLA_FIVE_HOME=''] (java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-mozilla-gtk-4335 in java.library.path no swt-mozilla-gtk ...
2. **源码解析**: - 源码提供给了开发者深入理解GeckoFx的工作原理的机会,可以自定义功能、优化性能或者修复潜在问题。 - 开发者可以通过阅读源码学习如何与Gecko引擎交互,例如处理网络请求、解析DOM、执行...
2. **Xulrunner**:作为运行时环境,Xulrunner提供了运行XUL应用程序的基础。它包含了渲染引擎、JavaScript引擎、网络组件以及其他必要的库,使得开发者无需关心底层操作系统细节即可运行XUL应用。 3. **Eclipse...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
这个特定的版本号“41.0.2”表示这是XULRunner的一个更新版本,发布于某个时间点,主要针对Windows 32位操作系统。"en-US"表明这是英文(美国)版本。在这一版本中,可能包含了性能优化、安全修复和新特性的添加。...
《XULRunner-win64-1.9.2.25:Java Swing的视图化展示利器》 在IT行业中,XULRunner是一款至关重要的工具,尤其对于开发者来说,它提供了一个强大的平台来运行基于XUL(XML User Interface Language)的应用程序。...
xulrunner-1.9.2.source.tar.bz2
xulrunner-1.9.2-gnome-support_1.9.2.17+build3+nobinonly-0ubuntu0.8.04.1_i386
XULRunner是一个开源的软件运行环境,由Mozilla基金会开发,主要用于支持使用XUL(XML User Interface Language)构建的跨平台应用程序。XULRunner提供了一套完整的库和框架,使得开发者可以构建桌面应用,而无需...
1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,具有跨平台的特性,允许开发者编写一次代码,到处运行。在这个项目中,Java用于创建浏览器的后端逻辑和用户界面,展示其强大的应用程序开发能力。 2. **...