第31夜 JavaFX 2.0 の組み込みブラウザで遊ぶ その2

スターとブックマークいただいたので続きでも。

あいかわらずの小ねた。派手なものはないですが。

HTMLのタイトルを取得する

これは簡単。

WebEngine we = new WebEngine();
〜省略〜

System.out.println("タイトル:" + we.getTitle());

HTMLのロードが終わった後ならこれでおわり。簡単ですね。

HTMLを文字列で渡す

URLを常に渡す必要もありません。

we.loadContent("<html>ほげー</html>");

これはWebアプリのテストにつかえそうかな。わざわざポートあけることはせずにとか。

DOM操作

DOM操作ができるということは何でもいじれるということだ。

たとえば動的にJavascriptを生成してそれを実行とか。

//scriptタグを動的に作る
Element script = we.getDocument().createElement("script");
//子にがりがりといれこむ
Node func = we.getDocument().createTextNode(
        "function hoge(text){alert('パラメータ:'+text);}");
script.appendChild(func);

//id='body'の最後に追加
we.getDocument().getElementById("body").appendChild(script);

//実行!
we.executeScript("hoge('ほげ')");

JAXPでDOM操作。こんな変態的なものも動く。やりすぎじゃないかというくらいに。

現状ないけどほしいもの

今のところブラウザで埋め込んで表示とjavascriptの外部から実行くらいしかない。

つまり、ソースの取得やクッキーやヘッダを操作してのアクセスができない。最初のアクセスにPOSTを渡すこともできない。
この辺ができれば表示せずともJavaScriptを理解するHTTPクライアントとして使い物になるんだが。ここができればテストなどでもかなりの威力を発揮できるだろう。

が、Javascriptを動的に追加できるのでなんかいろんなことはできそうだ。

あとクリックイベントとかからJavaをよびたい。Alertとかはさめばそれっぽいのもできるけど。


足りないものだらけ。

ベータということで基本機能は確定だろうからJavaFX 2.5(?)とか次のバージョンに期待か?

WebEngineとは関係ないけど

あとWebEngineとは関係ないけどJavaFXコンポーネントは非常にプアで、簡単なことしかできない。これでいいならAWTでいいじゃないかというレベルのもの。Swingより簡単になったけど、Swingよりはるかに簡単なものしか使えない。つまり、業務系や真っ当なツールにはあいかわらずSwingは必須である。Swingがいらなくなるくらいに進化してほしいものだ。

とはいえ、1.xから方向転換をしてから非常に短時間でいいものができてきたと思う。今まではコンポーネント等のほかに言語そのものの開発とそれをサポートする環境が必要だった。言語をJavaにすることで好きなIDE使って開発ができるし、型の強さはGUIアプリで非常に有効なのだからこれはよい方針転換だったと思う。


JavaFXがらみのお話は続く…?