読者です 読者をやめる 読者になる 読者になる

Galileo M4おっかけ:その1(ブラウザからJavaを呼んだりBrowsernoJavaScriptの実行結果をJava側で取り出したり)

Eclipse Plugin開発

しばらくNews And Noteworthyを追っかけてなかったら、何この怪しい機能。超素敵じゃないですか。ブラウザを使ったWebアプリケーション全盛の昨今、GWTみたいなJavaからJavaScriptにコンパイルするようなものもありましたが、SWTの漢っぷりもぜひ評価してもらいたい。
特に今回注目したのはSWTの「JavaScript-to-Java」と「Improved Java-to-JavaScript」。
前者公開されているSnipetはブラウザからJavaのとあるクラスを呼び出しているんですが、お分かりいただけますでしょうか?64行めの

static class CustomFunction extends BrowserFunction

ってやつです。中を詳しく追っかけている訳ではないんで正しいか、保証出来かねますが、たぶんCustomFunction#function()はブラウザからJavaScriptとして呼び出されているんじゃないかと思われます。42行めで”theJavaFunction”と名づけられてブラウザに登録され、99行めで評価されているわけです。CustomFunction#functionが返している型はObjectになってますが、内部ではJavaScriptのArrayで扱われていると思われます。
SWTに限ってますけど、JavaJavaScriptが見事に連携されているわけです。
後者で公開されているCVS - Eclipsepediaは地味な感じですが、39行めから46行めの

browser.addProgressListener(new ProgressListener() {
	public void changed(ProgressEvent event) {
	}
	public void completed(ProgressEvent event) {
		String value = (String)browser.evaluate("return document.getElementById('myid').childNodes[0].nodeValue;");
		System.out.println("Node value: "+value);
	}
});

は、ブラウザの読み込みの進捗をリスンしていると思われますが、ProgressListener#completed(ProgressEvent)で評価しているJavaScriptを使ってHTMLのデバッグ紛いの事をしているように見えるのは気のせいでショウカ。

個人的にEclipseの進化もそろそろ止まるんじゃないかと思っていたんですが、全然そんなことない。びっくりした。