live connect は無くなるのかな
LiveConnect は、JavaScript から Java クラスなどのメソッドを呼べる機能を既存の Java の機能を利用して提供するアプリケーション作成用のインターフェースの名称です。
https://developer.mozilla.org/ja/LiveConnect
他の参考リンク
- https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview/JavaScript_to_Java_Communication
- http://java.sun.com/javase/ja/6/webnotes/6u10/plugin2/liveconnect/
というわけで JavaScript から Java の機能を使用することができます。
これには 2 種類の方法があって、
- 特別な LiveConnect オブジェクトを使する。
- Java-Plugin (アプレット)の public メソッドから使用する。
があります。
……のですが、前者をサポートするブラウザは Firefox くらいしかありません。
(Opera 10.10 まではこれをサポートしていたのですが、10.50 以降は削除されそうな雰囲気です。Chrome もサポートしてないしね。)
以下は zip ファイルを作成する JavaScript コードですが、これが動くのは Firefox だけだと思われます(Opera10.10には btoa が無いので)。
(function(){ var data1 = new java.lang.String("aaa").getBytes("utf-8"); var data2 = new java.lang.String("日本語").getBytes("utf-8"); var result, bos, zos; try { bos = new java.io.ByteArrayOutputStream(); zos = new java.util.zip.ZipOutputStream(bos); zos.putNextEntry(new java.util.zip.ZipEntry("aaa.txt")); zos.write(data1, 0, data1.length); zos.closeEntry(); zos.putNextEntry(new java.util.zip.ZipEntry("日本語.txt")); zos.write(data2, 0, data2.length); zos.close(); var result = bos.toByteArray(); bos.close(); } finally { try { if (bos) bos.close(); } catch (e) {} try { if (zos) zos.close(); } catch (e) {} } var resultStr = String.fromCharCode.apply(String, Array.prototype.map.call(result, function(n){ return n & 0xFF; })); window.open('data:application/zip;base64,' + btoa(resultStr), 'aaa.zip'); })()
(日本語ファイル名が文字化けする件は検索してみてください。)
(「n & 0xFF」については byte を符号無しとして(unsigned byte として)int と相互に変換するには? - JavaFAQ を参照してください。)
そんな lovelive connect ですが、後者の「Java-Plugin の public メソッドから使用する。」は Google Chrome や IE でもサポートされています。簡単なデモページを作りました。
こちらはなくなる気配は無いので、バイナリ的なところは Java に任せちゃえるなと思いました。
(以前は Java Applet といえば多くの場合画面をアニメーションで飾るだけのものだった印象がありますが、すっかり裏方になってしまったなあという感じです。)