Java 8 から、Swingでも使用できるJavaFX のWebView Componentを使用できるようになりました。
コードは次のように単純です。
JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent
Platform.runLater( () -> { // FX components need to be managed by JavaFX
WebView webView = new WebView();
webView.getEngine().loadContent( "<html> Hello World!" );
webView.getEngine().load( "http://www.stackoverflow.com/" );
jfxPanel.setScene( new Scene( webView ) );
});
WebKit エンジンに支えられています (バージョンは JRE に依存し、最新のものです)。ただし、これは完全なブラウザーではないことに注意してください。たとえば、HTML5 オーディオ/ビデオのサポートを期待しないでください。それ以外の場合は、ブラウザーと同じように HTML + CSS + JS を実行します。
技術的には、基盤となるエンジンは C++ であり、ネイティブ Java ではありません。しかし、それは Oracle の公式 JRE にバンドルされており、ライブラリーを必要とせず、設定がなく、Java FX と同じくらいクロスプラットフォームであり、積極的に更新および保守されています。
ほとんどのユースケースでネイティブJavaと同じくらい良いと思いますか?
以下の情報は古くなっています。現在 Java で WebView を使用しているためです。
Cobra/Lobo、CSSBox 、およびFlying Saucerをすべて純粋な Javaで試しました。その他は、ネイティブまたは商用のいずれかです。
コンテンツ: オンザフライで生成される単純な HTML (文字列として)、埋め込まれた CSS 2.1、JS なし。
短編小説: Flying Saucer は最も使いやすく、レンダリングが最も正確ですが、コンテンツを完全に制御する必要があります。それ以外の場合は、ネイティブ ソリューションを探します。
長い話:
CSSBox の方が活発なようですが、一部のサードパーティ ライブラリに依存しているようです。たとえば、デモはデフォルトの Java 1.7 sax パーサーの動作方法を変更し、プログラムを壊した apache xerces を使用する nekohtml に依存していますが、Java の組み込み xerces を強制的に使用すると、ClassCastException (InlineBox to BlockBox)
. 最後にそれを機能させることはできません。さらに、既存のドキュメントを置き換える方法はまだ見つかっていません BrowserCanvas
。
Cobra はメンテナンスされなくなりました。1.7 で動作させるには、互換性の問題を手動で修正する必要があります。また、mozilla Rhino (JS を使用しない) を取得する必要がありますが、それだけです。その後はかなりスムーズで、Logger にペイント メッセージを非表示にするように指示するだけです。ドキュメントが単純である限り、レンダリングは正しく、速度はまあまあです。あまり一般的でないタグやより複雑なレイアウトを使用し始めると、Cobra はすぐに機能しなくなります。
Flying Saucer は、執筆時点 (2011 年 2 月) で 3 つの中で最高の CSS サポートを備えています。セットアップは非常に簡単です (たとえば、cobo のようなドキュメントや cssbox のような domparser をセットアップする必要はありません)。しかし、フライングソーサーは餌にとても厳しいです。ソースは整形式の XML である必要があります。たとえば、スタイルとスクリプトは CDATA でラップする必要があり、html エンティティを使用する場合は DTD を宣言する必要があります (したがって、html5 doctype はありません)。ただし、制御できるコンテンツを埋め込む場合は、これが最適な選択かもしれません。