Я публикую html от flash, который является flash + scorm 1.2. Мой html содержит .swf, так как игрок .swf player будет иметь меню, и ученик будет перемещаться по страницам этого swf, поэтому статус курса должен быть завершен, когда студент достигнет последнегостраница ,,, но что случилось со мной?когда 1-й раз студент посещает курс и закрывает его >> статус урока является неполным, что правильно ,,,, но во 2-й раз при открытии курса статус изменяется на завершенный, а в третий раз меняется на неполный .. 4-й разперейти к завершению, я не могу понять, что именно произошло, это функции javascript, которые я использую ::
var g_nFindAPITries = 0;
var g_objAPI = null;
var g_bInitDone = false;
var g_bFinishDone = false;
var g_bSCOBrowse = false;
var g_dtmInitialized = new Date(); // will be adjusted after initialize
var g_bMasteryScoreInitialized = false;
function AlertUserOfAPIError(strText) {
if (g_bShowApiErrors) {
var s = strText + "\n\n" + g_strDisableErrorMsgs;
if (!confirm(s)){
g_bShowApiErrors = false
}
}
}
function ExpandString(s){
var re = new RegExp("%","g")
for (i = arguments.length-1; i > 0; i--){
s2 = "%" + i;
if (s.indexOf(s2) > -1){
re.compile(s2,"g")
s = s.replace(re, arguments[i]);
}
}
return s
}
function FindAPI(win) {
while ((win.API == null) && (win.parent != null) && (win.parent != win)) {
g_nFindAPITries ++;
if (g_nFindAPITries > 500) {
AlertUserOfAPIError(g_strAPITooDeep);
return null;
}
win = win.parent;
}
return win.API;
}
function APIOK() {
return ((typeof(g_objAPI)!= "undefined") && (g_objAPI != null))
}
function SCOInitialize() {
var err = true;
if (!g_bInitDone)
{
if ((window.parent) && (window.parent != window)){
g_objAPI = FindAPI(window.parent)
}
if ((g_objAPI == null) && (window.opener != null)) {
g_objAPI = FindAPI(window.opener)
}
if (!APIOK()) {
AlertUserOfAPIError(g_strAPINotFound);
err = false
}
else
{
err = g_objAPI.LMSInitialize("");
if (err == "true")
{
g_bSCOBrowse = (g_objAPI.LMSGetValue("cmi.core.lesson_mode") == "browse");
if (!g_bSCOBrowse)
{
if (g_objAPI.LMSGetValue("cmi.core.lesson_status") == "not attempted")
{
err = g_objAPI.LMSSetValue("cmi.core.lesson_status","incomplete")
}
}
}
else
{
AlertUserOfAPIError(g_strAPIInitFailed)
}
}
if (typeof(SCOInitData) != "undefined")
{
// The SCOInitData function can be defined in another script of the SCO
SCOInitData()
}
g_dtmInitialized = new Date();
}
g_bInitDone = true;
return (err + "") // Force type to string
}
function SCOFinish() {
if ((APIOK()) && (g_bFinishDone == false)) {
SCOReportSessionTime()
if (g_bSetCompletedAutomatically){
SCOSetStatusCompleted();
}
if (typeof(SCOSaveData) != "undefined"){
// The SCOSaveData function can be defined in another script of the SCO
SCOSaveData();
}
g_bFinishDone = (g_objAPI.LMSFinish("") == "true");
}
return (g_bFinishDone + "" ) // Force type to string
}
// Call these catcher functions rather than trying to call the API adapter directly
function SCOGetValue(nam) {return ((APIOK())?g_objAPI.LMSGetValue(nam.toString()):"")}
function SCOCommit() {return ((APIOK())?g_objAPI.LMSCommit(""):"false")}
function SCOGetLastError() {return ((APIOK())?g_objAPI.LMSGetLastError():"-1")}
function SCOGetErrorString(n) {return ((APIOK())?g_objAPI.LMSGetErrorString(n):"No API")}
function SCOGetDiagnostic(p) {return ((APIOK())?g_objAPI.LMSGetDiagnostic(p):"No API")}
//LMSSetValue is implemented with more complex data management logic below
var g_bMinScoreAcquired = false;
var g_bMaxScoreAcquired = false;
// Special logic begins here
function SCOSetValue(nam,val){
var err = "";
if (!APIOK()){
AlertUserOfAPIError(g_strAPISetError + "\n" + nam + "\n" + val);
err = "false"
} else if (nam == "cmi.core.score.raw") err = privReportRawScore(val)
if (err == ""){
err = g_objAPI.LMSSetValue(nam,val.toString() + "");
if (err != "true") return err
}
if (nam == "cmi.core.score.min"){
g_bMinScoreAcquired = true;
g_nSCO_ScoreMin = val
}
else if (nam == "cmi.core.score.max"){
g_bMaxScoreAcquired = true;
g_nSCO_ScoreMax = val
}
return err
}
, и это в теле html
<body bgcolor="#ffffff" onload="SCOInitialize()" onunload="SCOFinish()" onbeforeunload="SCOFinish()" >
, так почему его время подкачки послевремя неполное и завершено, и я пытаюсь установить значение для cmi.core.lesson_status, но это не работает