SCORM1.2 SCOからAPIアダプタへの接続の概要

SCOはAPIアダプタのパスが分らない

APIアダプタは、SCOとサーバー側のLMSを結びつける、ブラウザ内で動作するLMSの一部です。APIアダプタは、JavaアプレットやJavaScript(AJAX)などで実装され、SCOからの要求を受け取り、サーバー側にデータを送信、サーバー側のデータをSCOに戻す役割を担っています。

APIアダプタには、LMSInitialize()などデータモデル要素を実行するメソッドが格納されています。SCOはJavaScriptを利用して、そのメソッドを実行します。

しかし、困ったことに、APIアダプタの位置は、必ず2つ上に存在するなどLMS共通として決まっていません。LMSによって配置場所が異なり、SCOからLMSInitialize()などを実行するパスが異なります。そのため、SCOは、パスが分からないためメソッドを実行することができません。

APIアダプタのパスを調べる

そこでAPIアダプタは、SCOにパスを取得しやすくするために、目印を作りました。これがAPIオブジェクトです。「API」とうい名称のオブジェクトで、APIアダプタと同じウインドウ階層にあります。つまりこのオブジェクトのパスが分れば、APIアダプタのメソッドが実行できるということです。

仕様書では、APIオブジェクトは、DOMオブジェクトであると記載されていますが、Windowオブジェクトと言った方が分かりやすいでしょう。Windowオブジェクトは、frameタグのname属性、JavaScriptのグローバル変数です。

LMSは、フレームで分割されていたり、複数ウインドウで構成されることがあります。APIオブジェクトは、ブラウザウインドウ内なら、どのウインドウでも良いという訳ではなく、必ずSCOからルートウインドウへ向かう親ウインドウに配置しなければなりません。SCOは、APIオブジェクトを見つけるために、親ウインドウ内に、APIオブジェクトが存在するか確認します。存在しなければ、さらに親のウインドウにないか、繰り上がり探していきます。

そして、SCOは、APIオブジェクトを探し出すと、パスを取得しデータモデル要素のメソッドを実行できるようになります。

こうした処理は、JavaScriptで自身でコーディングしていくか、ADLなどで配布されているライブラリを利用していきます。ライブラリを利用する場合、自動的に処理してくれるため、中でどう動いているのかは、概略を知っている程度で十分だと思います。