DOC-04-02 WebView组件概览
本章介绍JavaFX的内嵌浏览器,该UI组件通过其API提供了一个web查看器以及完整的浏览功能。
该内嵌浏览器基于开源web浏览器引擎WebKit。其支持CSS、JavaScript、DOM和HTML5。
该内嵌浏览器使你可以在你的JavaFX应用程序中完成以下任务:
● 加载本地或者远程URL的HTML内容
● 获取Web历史
● 执行JavaScript指令
● 执行由JavaScript向上调用JavaFX
● 管理web上的弹出式(pop-up)窗口
● 为内嵌浏览器应用特效
内嵌浏览器从Node类继承了所有的属性和方法,因此它包含Node的所有特性。
内嵌浏览器的类在javafx.scene.web包中。图2-1展示了内嵌浏览器的架构以及它与其他JavaFX类的关系。
图2-1 内嵌浏览器的架构
2.1 WebEngine类
WebEngine类提供了基本的web页面功能。尽管它并不与用户直接交互,但它也支持用户交互,如导航链接和提交HTML表单。WebEngine类一次处理一个web页面。它支持加载HTML内容和访问DOM对象等基本功能,也支持执行JavaScript指令。
有两个构造方法能够创建WebEngine对象:空构造和带一个URL参数的构造。如果你使用空构造方法来实例化它,那么URL可以通过WebEngine对象的load()方法来传入。
从JavaFX SDK2.2开始,开发人员可以为某个特定的web engine启用/禁用JavaScript调用,以及应用自定义样式表。用户可以使用自定义的样式表替换WebEngine实例渲染的页面中的默认样式表。
2.2 WebView类
WebView类是Node类的一个扩展。它封装了WebEngine对象,将HTML内容加入程序的scene中,并且提供各种属性和方法来应用特效和变换。WebView对象的getEngine()方法返回一个与之关联的web engine。
例2-1展示了在程序中创建WebView和WebEngine对象的典型方式。
例2-1 创建WebView和WebEngine对象
1 2 3 |
WebView browser = new WebView(); WebEngine webEngine = browser.getEngine(); webEngine.load("http://mySite.com"); |
2.3 PopupFeatures类
PopupFeatures类描述了JavaScript规范中定义的web弹出式(pop-up)窗口的功能。当你需要在你的程序中打开一个新的浏览器窗口时,这个类的实例就会被传递到通过调用setCreatePopupHandler()方法在WebEngine对象上注册的pop-up处理器中,如例2-2所示。
例2-2 创建pop-up处理器
1 2 3 4 5 6 |
webEngine.setCreatePopupHandler(new Callback<PopupFeatures, WebEngine>() { @Override public WebEngine call(PopupFeatures config) { // do something // return a web engine for the new browser window } }); |
如果该方法返回同一WebView对象的web engine,那么目标文档将会在同一个浏览器窗口中打开。如果要在另外的窗口中打开目标文档,请指定另一个web view的WebEngine对象。如果你需要阻止该弹出式窗口,则返回null即可。
2.4 其他特性
当使用WebView组件工作时,你应该记住,它拥有默认的内存缓存。这意味着任何已缓存的内容都会在包含该WebView组件的应用程序关闭时消失。当然,开发人员可以通过java.net.ResponseCache类来实现应用程序级别的缓存。从WebKit视角来看,持久化的缓存仅仅是网络层的一个属性,与connection和cookie处理机制类似。一旦其中某种缓存机制被采用,WebView组件就会以透明的方式来使用他们。


刚学习碰到页面不加载的情况,Win 10系统,例程未更改直接运行webview一直是空白
为什么加载页面很卡的样子
我突然觉得这个javaFX好像安卓啊
好棒的样子
webview不支持flash
javafx webview 没有js注入功能 你只能实现页面上已经有的js java里面写一段不能执行