Jmol JavaScript Object/ja
JSmol - Jmol JavaScript オブジェクト
JSmolの中核となるのはJmol JavaScriptオブジェクト(window.Jmol
)で、これにはJavaScriptの関数やユーティリティが含まれています。最初のJmolオブジェクトは2012年の初めにボブ・ハンソン(Bob Hanson)とポール・パイロット(Paul Pillot)によって開発されました。そしてこの年の後半にはJSmolに組み込まれました。ライブラリ JSmol.min.js はこのオブジェクトを提供するもので、以前はJmol Javaアプレットとともに排他的に用いられていた Jmol.js JavaScriptライブラリの後継となるものです。これを使えば、よりすっきりとした効率的な方法でウェブページ上のJmolとやりとりをすることができます。また、分子モデルの視覚化を抽象化することにより、JavaアプレットをJavaとは異なるHTML5 canvas要素(これはJmolでさえない場合もある)へとシームレスかつ選択的に置き換えることができます。
ウェブページ開発者はJSmolを使うと、もはやJavaアプレットをサポートしなくなったほとんどのウェブブラウザを対象とすることができます。これはJmolアプレットサロゲート(Jmol applet surrogate)を使っていて、互換性のある環境下でのJmol Javaアプレットをまだサポートしています。
JSmolはまた、画面の背後でRCSB PDBデータベース、米国国立がん研究センターのCACTVSサーバ、PubChemなどの公開データベースにアクセスする機能も備えています。
さらに、JSmolは以下のオブジェクトと簡単にやりとりすることができます。
- JSpecView HTML5 オブジェクト: これにより3DモデルをIR、NMR、UV/VIS、GC/MSスペクトルに関連付けることができます(より詳しい説明参照)
- JSME HTML5 オブジェクト: 簡単な化合物2d描画を使って3Dモデルを生成することができます(より詳しい説明参照)
JSmolはjQuery1.9や1.10と完全に互換性があります。(jQuery 2.0はサポートしていません。また原則として file:// を使ってローカルで実行するMSIEはサポートしないと報告されています。したがって、ローカル環境のMSIEでページを実行する必要がない場合は問題ありません。その場合、jQueryを少し修正する必要があります)。ライブラリはW3CとXHTMLで検証されています。
JSmolの主な機能
JSmol
JSmolはJmolアップレットのHTML5 canvas版の名称です。JSmolはPC、Mac、Linuxシステム、タブレットや携帯電話(iOSおよびAndroid)でJavaを必要とすることなく開くことができます。ハードウェアに基づくグラフィック高速化は使っていないので、JSmolはHTML5の標準機能が使えればどんなブラウザの上でも動作します。JSmolは完全にクライアント環境下で動作しており、ほとんどの操作においてサーバ側のしくみを必要としません。(一部のブラウザでバイナリファイルを読み込む場合、あるいはすべてのブラウザで画像やJmol状態を保存する場合には、サーバ側のPHPスクリプトを必要とします。通常はphp/jsmol.phpで提供されています。詳しくは以下を参照してください。)
JSmolはBob Hanson、Zhou Renjian、Takanori Nakane(中根 崇智)によって開発されました。
JSmolを使うとJmolと同じように分子モデルを描き、スクリプトによる一括操作を行い、対話的に操作することができます。なぜなら、ソースコードは両者で共有しているからです。JSmolはJmolとは別のプログラムという訳ではないということを留意しておいてください。これは単にJavaではなくJavaScriptへとJmolをコンパイルしただけのものです(Java2Scriptのソフトウェアのおかげです)。
現在のJSmolの制限事項
- 一部のブラウザでは、セキュリティポリシー上の理由からローカルファイル(ウェブブラウザ内ないファイル)を利用することはできません。
- Operaではローカルファイルにアクセスできません。
- MSIEではバイナリファイルでない場合に限りローカルファイルにアクセスできます。
- Chromeでは特別なコマンドラインフラグを指定して起動した場合に限りローカルファイルにアクセスできます(
chrome.exe --allow-file-access-from-files
)。 - Firefoxでは
about:config
に「security.fileuri.strict_origin_policy = false
」の設定を行うことによりローカルファイルにアクセスできるようになります。
- バイナリファイルの読み込み(例:Spartanファイル、gzip圧縮されたファイル、pngjファイル): 読み込むことはでいますが、ファイル種を識別できるようなファイル名にしておく必要があります(下記参照)。
- jpg、png、pngj(png+zip)データへの書き込みは特に制限なく行うことができますが、ユーザがダウンロードできるようにするにはサーバ側での設定が必要です(あるいは、 画像をエクスポートするに記載している別の方法を参照してください)。
- Jmol
prompt
コマンドは、HTML5バージョンの場合、単純なJavaScript様の応答以外は使えません。 - JSmolにおけるWebGLの実装はまだ完全ではなく、機能は限られてます。
バイナリファイルの読み込み
Jmol(Java)はファイルを開いてから、そのファイルがバイナリファイルなのかどうかを判断することができます。JSmol(JavaScript)の場合、そうではありません。なぜならAJAX転送のしくみがバイナリファイルとそうでないファイルでは違うからです。そのため、JSmolはよみこむ前にそのファイルがバイナリなのかそうでないのかを判断しなければならないのです。
ファイル名
JSmolはファイルを読み込む前に、ファイル名を調べてそのファイルがバイナルなのかそうでないのかを判断します。
JSmol will switch to binary mode for files with any of the following in their file name: JSmolは、ファイル名が以下のいずれかを含む場合はバイナリモードに切り替えます。 .bin .gz .zip .jpg .png .jmol .smol .spartan .mrc .pse
これらの「拡張子」はファイル名のどこにあっても、バイナリ・アクセス・モードに切り替えることができます。つまり、例えば、ファイル名のどこか好きな場所に .bin
を含めるようファイル名を変更すれば、JSmolはそのファイルをバイナリファイルと認識して読み込みます。
- 上級者向け: 別の拡張子をバイナリとして読み込む必要があり、バイナリファイルとして認識する既定の拡張子を含むようファイル名を変更することができない場合は、Jmolオブジェクトの初期化後に以下のJavaScriptコードを実行することにより、対象拡張子を追加することができます。
Jmol._binaryTypes.push('.myExtension');
ブラウザのふるまい
バイナリファイルの読み込みを Chrome や MSIE と互換性を持たせるためには、サーバ側でバイナリデータを BASE64
形式に変換する処理が必要になります。これは、Firefoxだけがクリーンな(信頼性の高い)同期バイナリファイル転送ができるからです。(そして、今のところ、Jmolのすべてのファイル読み込みを完全に非同期モードに移行する方法は見つかっていません)。
ページの訪問者がバイナリファイルを読み込む必要がある場合、 JSmol の配布物に含まれている jsmol.php ファイル(下記参照)のコピーをサーバーに置き、Info配列のserverURLを使ってそれを指定します。例として、デモページではこの方法を使っています。
この方法を使うには、サーバーでPHPが使えるようになっている必要があります。そうでない場合は、PHP が動作する別のサーバー上にある jsmol.php ファイルを指定して「拝借」することもできます(そのサーバーの所有者に問い合わせてみてください)。
Chromeなどのブラウザでは、ローカルのバイナリファイルを読み込むときに起こる問題を、ローカルのウェブサーバを経由してページを実行することで解決できる場合があります。