⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api_wrapper.js

📁 完美的在线教育系统
💻 JS
📖 第 1 页 / 共 2 页
字号:
/** * Wrapper to the SCORM API provided by Dokeos * The complete set of functions and variables are in this file to avoid unnecessary file * accesses. * Only event triggers and answer data are inserted into the final document. * @author	Yannick Warnier  - inspired by the ADLNet documentation on SCORM content-side API * @package scorm.js *//** * Initialisation of the SCORM API section.  * Find the SCO functions (startTimer, computeTime, etc in the second section) * Find the Dokeos-proper functions (checkAnswers, etc in the third section) */var _debug = false;var findAPITries = 0;var _apiHandle = null; //private variablevar errMsgLocate = "Unable to locate the LMS's API implementation";var _NoError = 0;var _GeneralException = 101;var _ServerBusy = 102;var _InvalidArgumentError = 201;var _ElementCannotHaveChildren = 202;var _ElementIsNotAnArray = 203;var _NotInitialized = 301;var _NotImplementedError = 401;var _InvalidSetValue = 402;var _ElementIsReadOnly = 403;var _ElementIsWriteOnly = 404;var _IncorrectDataType = 405;/** * Gets the API handle right into the local API object and ensure there is only one. * Using the singleton pattern to ensure there's only one API object. * @return	object The API object as given by the LMS */var API = new function (){	if (_apiHandle == null)	{		_apiHandle = getAPI();	}	return _apiHandle;}/** * Finds the API on the LMS side or gives up giving an error message * @param	object	The window/frame object in which we are searching for the SCORM API * @return	object	The API object recovered from the LMS's implementation of the SCORM API */function findAPI(win){	while((win.API == null) && (win.parent != null) && (win.parent != win))	{		findAPITries++;		if(findAPITries>10)		{			alert("Error finding API - too deeply nested");			return null;		}		win = win.parent	}	return win.API;}/** * Gets the API from the current window/frame or from parent objects if not found * @return	object	The API object recovered from the LMS's implementation of the SCORM API */function getAPI(){	//window is the global/root object of the current window/frame	var MyAPI = findAPI(window);	//look through parents if any	if((MyAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined"))	{		MyAPI = findAPI(window.opener);	}	//still not found? error message	if(MyAPI == null)	{		alert("Unable to find SCORM API adapter.\nPlease check your LMS is considering this page as SCORM and providing the right JavaScript interface.")	}	return MyAPI;}/** * Handles error codes (prints the error if it has a description) * @return	int	Error code from LMS's API */function ErrorHandler(){	if(API == null)	{		alert("Unable to locate the LMS's API. Cannot determine LMS error code");		return;	}	var errCode = API.LMSGetLastError().toString();	if(errCode != _NoError)	{		if(errCode == _NotImplementedError)		{			var errDescription = "The LMS doesn't support this feature";			if(_debug == true)			{				errDescription += "\n";				errDescription += api.LMSGetDiagnostic(null);			}			alert (errDescription);		}		else		{			var errDescription = API.LMSGetErrorString(errCode);			if(_debug == true)			{				errDescription += "\n";				errDescription += api.LMSGetDiagnostic(null);			}			alert (errDescription);		}	}	return errCode;}/** * Calls the LMSInitialize method of the LMS's API object * @return string	The string value of the LMS returned value or false if error (should be "true" otherwise) */function doLMSInitialize(){	if(API == null)	{		alert(errMsgLocate + "\nLMSInitialize failed");		return false;	}	var result = API.LMSInitialize("");	if(result.toString() != "true")	{		var err = ErrorHandler();	}	return result.toString();}/** * Calls the LMSFinish method of the LMS's API object * @return	string	The string value of the LMS return value, or false if error (should be "true" otherwise) */function doLMSFinish(){	if(API == null)	{		alert(errMsgLocate + "\nLMSFinish failed");		return false;	}	else	{		var result = API.LMSFinish('');		if(result.toString() != "true")		{			var err = ErrorHandler();		}	}	return result.toString();}/** * Calls the LMSGetValue method * @param	string	The name of the SCORM parameter to get * @return	string	The value returned by the LMS */function doLMSGetValue(name){	if (API == null)	{		alert(errMsgLocate + "\nLMSGetValue was not successful.");		return "";	}	else	{		var value = API.LMSGetValue(name);		var errCode = API.LMSGetLastError().toString();		if (errCode != _NoError)		{			// an error was encountered so display the error description			var errDescription = API.LMSGetErrorString(errCode);			alert("LMSGetValue("+name+") failed. \n"+ errDescription);			return "";		}		else		{			return value.toString();		}	}}/** * Calls the LMSSetValue method of the API object * @param	string	The name of the SCORM parameter to set * @param	string	The value to set the parameter to * @return  void */function doLMSSetValue(name, value){   if (API == null)   {      alert("Unable to locate the LMS's API Implementation.\nLMSSetValue was not successful.");      return;   }   else   {      var result = API.LMSSetValue(name, value);      if (result.toString() != "true")      {         var err = ErrorHandler();      }   }   return;}/** * Calls the LMSCommit method */function doLMSCommit(){	if(API == null)	{      		alert(errMsgLocate +"\nLMSCommit was not successful.");		return "false";	}	else	{		var result = API.LMSCommit("");		if (result != "true")		{			var err = ErrorHandler();		}	}	return result.toString();}/** * Calls GetLastError() */function doLMSGetLastError(){	if (API == null)	{		alert(errMsgLocate + "\nLMSGetLastError was not successful.");      //since we can't get the error code from the LMS, return a general error		return _GeneralError;	}	return API.LMSGetLastError().toString();}/** * Calls LMSGetErrorString() */function doLMSGetErrorString(errorCode){   if (API == null)   {      alert(errMsgLocate + "\nLMSGetErrorString was not successful.");   }   return API.LMSGetErrorString(errorCode).toString();}/** * Calls LMSGetDiagnostic() */function doLMSGetDiagnostic(errorCode){   if (API == null)   {      alert(errMsgLocate + "\nLMSGetDiagnostic was not successful.");   }   return API.LMSGetDiagnostic(errorCode).toString();}/** * Second section. The SCO functions are located here (handle time and score messaging to SCORM API) * Initialisation */var startTime;var exitPageStatus;/** * Initialise page values */function loadPage(){	var result = doLMSInitialize();	if(result != false)	{		var status = doLMSGetValue("cmi.core.lesson_status");		if(status == "not attempted")		{			doLMSSetValue("cmi.core.lesson_status","incomplete");		}		exitPageStatus = false;		startTimer();	}}/** * Starts the local timer */function startTimer(){	startTime = new Date().getTime();}/** * Calculates the total time and sends the result to the LMS */function computeTime(){	   if ( startTime != 0 )	   {	      var currentDate = new Date().getTime();	      var elapsedSeconds = ( (currentDate - startTime) / 1000 );	      var formattedTime = convertTotalSeconds( elapsedSeconds );	   }	   else	   {	      formattedTime = "00:00:00.0";	   }	   doLMSSetValue( "cmi.core.session_time", formattedTime );}/** * Formats the time in a SCORM time format */function convertTotalSeconds(ts){	var sec = (ts % 60);	ts -= sec;	var tmp = (ts % 3600);  //# of seconds in the total # of minutes	ts -= tmp;              //# of seconds in the total # of hours    // convert seconds to conform to CMITimespan type (e.g. SS.00)	sec = Math.round(sec*100)/100;	var strSec = new String(sec);	var strWholeSec = strSec;	var strFractionSec = "";		if (strSec.indexOf(".") != -1)	{		strWholeSec =  strSec.substring(0, strSec.indexOf("."));		strFractionSec = strSec.substring(strSec.indexOf(".")+1, strSec.length);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -