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コンポーネントで透過的に使用されます。


