Packages, java, sun, netscapeここら辺のお話
JavaScriptではJavaとの連携がすぐできるように実装されている。それを実現するのがPackages, java, sun, netscapeであり仕様はhttp://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Packagesこの辺に記載ある。簡単なサンプルとしてはid:shogo4405:20060825:1156489703で載せたプロパティのアクセスのコード(分かりにくいので以下に記載)をJavaScriptで動作するようにするに書き直すと
■PHPによるJavaオブジェクトへのアクセス $system = new Java('java.lang.System'); print $system->getProperty('java.version'); ■JavaScriptによるJavaオブジェクトへのアクセス system = Packages.java.lan.System; alert(system.getProperty('java.version'));
と上記のように書ける。IEでは駄目なのでFirefoxやOpera(の高バージョン)からアクセスしてみるとコンピューターに搭載されているJavaのバージョンが表示されます。ちなみにjava, sun, netscapeは接頭のPackagesが不要。
Packages
面白いのがPackagesは自信で定義したJavaクラスにもアクセス可能な点。例えば以下ようなTest.classにクラスパスを通してあると以下のようにアクセスできるようになる。こういうことが出来るとJavaScriptからJava経由でデーターベースにアクセスしてdrop dbとか、drop tableとかできるじゃねぇ?〜という点が面白い。
test = Packages.Test; print(test.text()); // Hello World!!
■Test.java class Test { static public String text(){ return "Hello World!!"; }; }
セキュリティの関係で
ブラウザからjava.io.Fileとかへのアクセスは難しい。シェルで動くRhinoとかSpiderMonkeyは未確認(今後検証します)
ところでFirefoxやOperaで実行すると?
test = Packages.Test; alert(test.text());
動きません。セキュリティー上からそのようになっているのかそれともある特定のフォルダに突っ込まないと動かないのか?と別に設定が必要なのでしょうか。気が向いたらまた調査しよう。
実装は
- SpiderMonkey
- Rhino
- Opera7以上