2 JavaFX WebViewコンポーネントの概要
この章では、WebビューアおよびそのAPIを介したフル・ブラウズ機能を提供するユーザー・インタフェース・コンポーネントであるJavaFX埋込みブラウザを紹介します。
埋込みブラウザ・コンポーネントは、オープン・ソースのWebブラウザ・エンジンであるWebKitに基づいています。カスケード・スタイルシート(CSS)、JavaScript、ドキュメント・オブジェクト・モデル(DOM)およびHTML5をサポートしています。
埋込みブラウザを使用すると、JavaFXアプリケーションで次のタスクを実行できます。
-
ローカルおよびリモートURLからのHTMLコンテンツのレンダリング
-
Web履歴の取得
-
JavaScriptコマンドの実行
-
JavaScriptからJavaFXへのアップコールの実行
-
Webポップアップ・ウィンドウの管理
-
埋込みブラウザへの効果の適用
埋込みブラウザは、すべてのフィールドおよびメソッドをNode
クラスから継承し、その機能をすべて含んでいます。
埋込みブラウザを構成するクラスは、javafx.scene.web
パッケージ内にあります。図2-1に、埋込みブラウザのアーキテクチャと、それが他のJavaFXクラスにどのように関連するかを示します。
WebEngineクラス
WebEngine
クラスでは、基本的なWebページ機能が提供されます。ユーザーと直接には対話しませんが、リンクのナビゲート、HTMLフォームの送信などのユーザーとの対話がサポートされます。WebEngine
クラスでは、一度に1つのWebページが処理されます。HTMLコンテンツのロード、DOMへのアクセスなどの基本的なブラウズ機能、およびJavaScriptコマンドを実行する機能もサポートされます。
空のコンストラクタとURLが指定されたコンストラクタの2つのコンストラクタを使用すると、WebEngine
オブジェクトを作成できます。空のコンストラクタをインスタンス化すると、load
メソッドを介してWebEngine
オブジェクトにURLを渡すことができます。
JavaFX SDK 2.2より、開発者は特定のWebエンジンに対するJavaScriptコールの有効または無効にしたり、カスタム・スタイルシートを適用できます。ユーザー・スタイルシートにより、このWebEngine
インスタンスでレンダリングされるページ上のデフォルト・スタイルが、ユーザー定義のスタイルに置き換えられます。
WebViewクラス
WebView
クラスは、Node
クラスの拡張です。WebEngine
オブジェクトをカプセル化し、HTMLコンテンツをアプリケーションのシーンに組み込み、効果や変換を適用するプロパティおよびメソッドを提供します。WebView
オブジェクトに対してコールされたgetEngine()
メソッドにより、関連付けられたWebエンジンが返されます。
例2-1に、アプリケーションでWebView
およびWebEngine
オブジェクトを作成する一般的な方法を示します。
PopupFeaturesクラス
PopupFeatures
クラスでは、JavaScriptの仕様での定義に従って、Webポップアップ・ウィンドウの機能が記述されます。アプリケーションで新しいブラウザ・ウィンドウを開く必要がある場合は、例2-2に示すようにsetCreatePopupHandler
メソッドを使用することにより、このクラスのインスタンスがWebEngine
オブジェクト上に登録されたポップアップ・ハンドラに渡されます。
例2-2 ポップアップ・ハンドラの作成
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エンジンが返された場合は、同じブラウザ・ウィンドウでターゲット・ドキュメントが開きます。別のウィンドウでターゲット・ドキュメントを開くには、別のWebビューのWebEngine
オブジェクトを指定します。ポップアップ・ウィンドウをブロックする必要がある場合は、null
値を返します。
その他の機能
WebView
コンポーネントを使用する際は、このコンポーネントにデフォルトのインメモリー・キャッシュがあることに注意してください。つまり、WebView
コンポーネントを含むアプリケーションを閉じると、キャッシュされた内容がすべて失われます。ただし、開発者はjava.net.ResponseCache
クラスを使用することで、キャッシュをアプリケーション・レベルで実装できます。WebKitから見ると、永続キャッシュは、接続やCookieハンドラと似た、ネットワーク・レイヤーのプロパティの1つです。これらの一部がインストールされると、WebView
コンポーネントで透過的に使用されます。