扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:builder.com.cn 2007年1月15日
关键字:
出于简化的考虑,在这个示例代码里,嵌入的浏览器代码在BrowserFrame.java里被隔离开。现在我们就看一下创建浏览器的过程;
BrowserEngineManager bem = BrowserEngineManager.instance();BrowserEngineManager被作为BrowserEngine实例的工厂。目前市面上有3个引擎,IE、MOZILLA和WEBKIT,其中Internet Explorer是Windows平台上的,Mozilla(不是Firefox)是Windows、Linux和Solaris平台上的,而WEBKIT用于Mac OSX平台。BrowserEngineManager的工作原理是根据默认的浏览器设置来设定应该是什么浏览器。这里的一个小问题是,如果在Windows上默认的浏览器是Firefox,那么原先的默认机制就会不起作用。我们通过检查“活动引擎(Active Engine)”来解决这个问题,如果它是空,那么就要试着强制JDIC使用Internet Explorer。
if(bem.getActiveEngine()==null) bem.setActiveEngine(BrowserEngineManager.IE);现在我们要活动的BrowserEngine为我们提供一个IwebBrowser实例。
IWebBrowser webBrowser = bem.getActiveEngine().getWebBrowser();这个IwebBrowser不是我们真正的图形用户界面(GUI)组件。要把它加到用户界面(UI)里,我们需要从它获得GUI;
panel.add(webBrowser.asComponent());当你让所包含的面板出现时,你会看到一大块空白的区域。我们需要告诉它显示什么;
webBrowser.setURL(new URL("http://uk.builder.com/"));在示例代码中,我们在屏幕的底部加了一个状态标签、一个主页按钮、一个用于输入URL的文本字段,以及一个停止按钮。我们通过向WebBrowser添加一个WebBrowserListener来更新状态标签;有一个WebBrowserListenerAdapter可以让我们的工作更简单一些,我们可以用它来保存必须在WebBrowserListener里实现的每个方法;
webBrowser.addWebBrowserListener(new WebBrowserListenerAdapter() { public void statusTextChange(WebBrowserEvent webBrowserEvent) { if(webBrowserEvent.getData()==null) { statuslabel.setText("Status:"); } else { statuslabel.setText("Status:"+webBrowserEvent.getData()); } } });
我们捕捉statusTextChange事件并通过查询其getData()方法来检查与WebBrowserEvent相关的字符串信息。如果它为空,我们就设置一个空状态标签;否则,我们就把可供人直接阅读的消息直接复制到状态标签上。使用WebBrowser侦听程序,我们就有可能捕捉到状态文本、标题文本、下载进程、页面显示的完成,以及浏览器组件的启动和关闭等变化。实现停止按钮甚至更简单;
stopbutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { webBrowser.stop(); } });
我们只需要对webBrowser调用stop()方法就行了。类似的,back()、forward()和refresh()等方法都可以模拟经典的浏览器按钮,isBackEnabled()和isForwardEnabled()可以用来测试前两个方法是否能用。
以上就是从源代码的角度看在应用程序中嵌入浏览器所需要做的事情。JDIC在Windows、Linux和Solaris上工作的非常好;对MacOSX的支持则是相当新的。正如先前指出的,它的最大的问题是缺乏对Firefox的支持,而Firefox正在扩大其在浏览器市场上的占有率。但是重要的是,你需要在每个平台上都进行测试,支持每个平台上的所有浏览器。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者