Java6でJavaScriptを試した
Java6が正式リリースされたので早速JavaScriptを試してみました。JRunScriptではなくjavax.script.*の検証です。とりあえずHello World!!から...
Hello World!!(Main.java)
import javax.script.*; class Main { static ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); static public void main(String args[]) { // (I) try { engine.eval("println('Hello World!!')"); } catch(ScriptException e) { }; }; };
Hello World!!
グローバルオブジェクト
// for(i in this) println(i); の出力結果 println context // javax.script.SimpleScriptContext print org edu javax com net
ところで…
JavaScriptから外部のJavaScriptファイルを読込む方法が標準でないようです。まぁ言語仕様でないから仕方ないか...。って言っていられないです。もしサーバサイドで利用しようと思った場合に外部ファイル読込がないのは困ります。
それJRunScriptで出来るよ
JavaScript上から外部JavaScriptの読込はJRunScript(Rhino)ではしっかり実装されています。load関数がそれにあたります。で、どうやっているか確認したら。JRunScriptにはengineって言うオブジェクトが存在していてそれを利用していることが分かりました。engineオブジェクトはScriptEngine自身。
println(typeof(engine)); // object
というわけで
上記Main.javaに以下のコードを(I)に追加。これでJavaScriptからScriptEngineが操作できるようになりました。
engine.put("engine", engine);
あとはJavaScriptでload関数の実装(手抜き)
function load(f) { var r = new java.io.FileReader(f); engine.eval(r); r.close(); };
load("foo.js"); // で外部jsが実行される。
それ以外にも
Javaからload関数つくってバインドするっていう手もありでしょうか。
ただ
load関数相当が標準で欲しかったです...。これでますますJavaScriptがJavaスクリプトって認識されることに(ならないか(?-?))