Newsgroup: it.comp.lang.javascript
Titolo: come JS dialoga con un LMS??

ciao a tutti
LMS (learning management system) in questione è dokeos, ma potrebbe 
essere qualsiasi altro.
Premesso che tutta la specifica SCORM è per me e i miei colleghi
estremamente complicata, non sono riuscito a capire se esiste un metodo
per capire quali siano le API implementate da uno specifico LMS e una 
volta che si sia riusciti a far partire il "dialogo" come interagisce JS
con LMS........ faccio un esempio
Gli script per dialogare son un LMS sono molti a disposizione
Ne ho usato uno dei tanti verificando che funziona.
Una volta partito il dialogo con il LMS [ LMSInitialize ] cerco di far 
partire un timer [ startTimer() ] che dovrebbe comunicare al LMS il 
tempo trascorso sulla  pagina che chiama lo script e scriverlo nelle 
statistiche. Purtroppo, come è facile immaginare, il timer non funziona 
a dovere....
Il documento carica lo script...
<body     onload="init()"
         onload="startTimer()"
         onunload="finish()">
lo script..
var nFindAPITries = 0;
var API = null;
function FindAPI(win)
     {
     while ((win.API == null) && (win.parent != null) && (win.parent != 
win))
         { nFindAPITries ++;
             if (nFindAPITries > 500)
             { alert("Error in finding API -- too deeply nested.");
     return null } win = win.parent }
     return win.API
     }
function init()
/* The (window.parent != window) test is necessary to work around a 
Microsoft Internet Explorer oddity. */
{
     if ((window.parent) && (window.parent != window)){ API = 
FindAPI(window.parent) }
if ((API == null) && (window.opener != null)){ API = 
FindAPI(window.opener) }
if (API == null) { alert("No API adapter found") }
else { API.LMSInitialize("") }
}
function finish()
{
if (API != null) { API.LMSFinish("") }
}
// TIMER
var myTime = computeTime();
API.LMSSetValue("cmi.core.session_time",myTime );
API.LMSSetValue("cmi.core.lesson_status", ScormStatus);
API.LMSFinish("");
//    Declare the following Javascript functions :
function startTimer()
     {
     startDate = new Date().getTime();
     }
function computeTime()
     {
     var formattedTime = "00:00:00.0";
     if ( startDate != 0 )
            {
               var currentDate = new Date().getTime();
               var elapsedSeconds = ( (currentDate - startDate) / 1000 );
               formattedTime = convertTotalSeconds( elapsedSeconds );
            }
     return formattedTime;
     }
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
     if ( (ts % 3600) != 0 ) var Hour = "00" ;
     else var Hour = ""+ (ts / 3600);
     if ( (tmp % 60) != 0 ) var Min = "00";
     else var Min = ""+(tmp / 60);
     Sec=""+Sec
     Sec=Sec.substring(0,Sec.indexOf("."))
     if (Hour.length < 2)Hour = "0"+Hour;
     if (Min.length < 2)Min = "0"+Min;
     if (Sec.length <2)Sec = "0"+Sec;
     var rtnVal = Hour+":"+Min+":"+Sec;
     return rtnVal;
      }
grazie in anticipo per le eventuali risposte
Edoardo


dovrebbe essere il sistema LMS che fornisce l'applet che contiene le 
funzioni chiamate dal javascript.
In sostanza dovresti avere una API.class e un LMS.jar da qualche parte che 
vengono caricati e che forniscono le funzioni chiamate dai file 
APIWrapper.js e SCOfunctions.js che sono dentro le pagine SCO. 

Birbo ha scritto:

purtroppo non è così semplice..
non c'è nessuna applet ma il codice del LMS, in questo caso php,
ma potrebe essere phyton oppure asp che deve fornire questa funzionalità 
a JS che poi la manipola....
qualche idea?
Edoardo