• 検索結果がありません。

API インスタンスの実装方法

5. RTE

5.3 API

5.3.3 API インスタンスの実装方法

起動されたSCOとLMSとで通信を確立するには,まずAPIインスタンスを呼び出す必要が ある.SCOはAPIインスタンスが実装されているLMSウィンドウ(APIフレーム)が見つかる まで,親およびオープナ・ウィンドウの階層を再起的に探索することが必要となる.ここでLMS ウィンドウは,API インスタンスを(”API_1484_11”と命名される)DOM オブジェクトとして アクセスできるように,LMS側で提供しなければいけない.

3 APIインスタンス(API Instance)は,SCORM 1.2以前ではAPIアダプタ(API Adapter)

と呼ばれていた.

4 SCORM 2004では,APIインスタンスの名称が”API”から”API_1484_11”に変更された.

5.3.3.1 LMSの責任範囲

LMSはAPIインスタンスを提供しなければならない.API インスタンスを提供するための必 要条件は以下のとおりである.

・ APIインスタンスは, API_1484_11 と命名されるオブジェクトとしてアクセス可能でな ければならない.

・ API インスタンスは,SCOからECMAScript(Javaスクリプト)でアクセス可能でなく てはならない.

・ LMSは,API インスタンスを含んでいる子ウィンドウあるいは,LMS ウィンドウの子フ レームであるブラウザ・ウィンドウでSCOを起動しなければならない.

親ウィンドウ3 親ウインドウ2

親ウインドウ1

SCO API̲1484̲11

API̲1484̲11

ウィンドウ・オープナ

SCO API̲1484̲11

API̲1484̲11

親ウィンドウ3 親ウィンドウ2

親ウィンドウ1

SCO

親ウィンドウ4

ウィンドウ・オープナ

API̲1484̲11 API̲1484̲11

図 5.3  API の起動方法 

5.3.3.2 SCOの責任範囲

SCOは,APIインスタンスを探索して,LMSと通信を確立できるようにしなければならない.

SCOがDOMウィンドウ内に配置されているAPIインスタンスを見つける為には,以下の範囲 を探索しなければならない.

・  現在のウィンドウに対する親ウィンドウの連鎖=連鎖している親ウィンドウがトップ・ウ ィンドウになるまで探索する.

・  ウィンドウ・オープナ(window.opener)=SCOのウィンドウをオープンしたウィンドウ.

・  ウィンドウ・オープナに対する親ウィンドウの連鎖.

親ウィンドウN 親ウィンドウ2

親ウィンドウ1

SCO

SCO

ウィンドウの連鎖

親ウィンドウN 親ウィンドウ2

親ウィンドウ1

ウィンドウ・オープナの親ウィンドウの連鎖

図 5.4  API インスタンスの探索 

また,SCOがAPIインスタンスを見つけると,最低限,Initialize(“”)とTerminate(“”)のAPI を呼び出さなくてはならない.IEEE標準規格では,ECMA スクリプト(Java スクリプト)の 簡単なコードを利用して API インスタンスを探索する方法を提供している.しかし規格では ECMAスクリプトの利用を必要条件としていないので,他の方法を採用することもできる.

APIインスタンスを再帰的に探索するためのサンプルコードは以下のとおりである.

 

<html> 

<head> 

<script type=”text/javascript”

<!‑ 

 //‑ API インスタンスを見つける    var API null; 

 function FindAPI(win) 

   if ((typeof(win.API̲1484̲11) != undefined”&& (win.API̲1484̲11 != null))       return win.API̲1484̲11; 

   } else if (win.location == top.location)       return null; 

   } else 

     return FindAPI(win.parent); 

   }   } 

 function MyInit() 

   // API フレームを見つける 

   if ((window.parent != null) && (window.parent != window))       API FindAPI(window.parent); 

   } 

   // ウィンドウ・オープナにある API フレームを見つける     if ((API == null) && (window.opener != null))       API FindAPI(window.opener); 

   } 

   if (API != null)       // 初期化を行います       API.Initialize(""); 

   } else 

     alert("API が見つかりません."); 

   }   } 

 funciton MyFin()     if (API != null)       // 終了処理を行います       API.Terminate(""); 

   }   }  //‑

</script> 

</head> 

<body onload=”MyInit();” onunoad=”MyFin()”

 <h1>SCORM サンプル</h1> 

</body> 

</html>