Captivate SCORM 2004 Output, removed SCORM 1.2 code
// set document.domain property here, if it works for your environment/SCORM implementation | |
// document.domain=""; | |
var flashvars = {}, | |
params = { bgcolor: "#f5f4f1", menu: "false" }, | |
attributes = { id: "Captivate", name: "Captivate" }, | |
g_intAPIType = 0, // Specifies SCORM 2004 | |
strURLFile = "sample.swf", // Name of the flash file | |
intIntervalSecs = 1, // Number of seconds to wait for SCORM API to load | |
g_intAPIOrder = 0, // Way to search for API object (0 - starts with bottom up; 1 - starts top down) | |
strURLParams = ""; | |
timeCurrent_int = new Date().getTime(), | |
timeLimit_int = new Date().getTime() + (intIntervalSecs * 1000), | |
function callbackFn(e){ | |
//e.ref is the <object> aka SWF file. No need for getElementById | |
if(e.success && e.ref){ | |
e.ref.tabIndex = -1; //Set tabIndex to enable focus on non-form elements | |
e.ref.focus(); | |
} | |
} | |
function Finish(){ | |
if(isAPI() && g_bFinishDone == false){ | |
g_objAPI.Commit(""); | |
g_bFinishDone = (g_objAPI.Terminate("") === "true"); | |
} | |
return g_bFinishDone + ""; // Force type to string | |
} | |
// Handle fscommand messages from a Flash movie | |
function Captivate_DoFSCommand(command, args){ | |
var CaptivateObj = document.getElementById("Captivate"), | |
strFSArgs = new String(args), | |
strFSCmd = new String(command), | |
strErr = "true", | |
strFSArg1, | |
strFSArg2, | |
strFSArg3, | |
intFSDelimiter = strFSArgs.indexOf("|"), | |
strFSTemp; | |
if(intFSDelimiter > -1){ | |
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API | |
strFSTemp = strFSArgs.substr(intFSDelimiter + 1); | |
intFSDelimiter = strFSTemp.indexOf("|"); | |
if(intFSDelimiter > -1){ | |
strFSArg2 = strFSTemp.substr(0, intFSDelimiter); // Value | |
strFSArg3 = strFSTemp.substr(intFSDelimiter + 1); // Variable | |
} else { | |
strFSArg2 = strFSTemp; | |
} | |
} else { | |
strFSArg1 = strFSArgs; | |
} | |
// do nothing, if SCORM API is not available | |
if(!isAPI()){ return; } | |
if(strFSCmd == "Initialize"){ | |
CaptivateObj.SetVariable(strFSArg3, g_objAPI.Initialize("")); | |
} else if(strFSCmd == "SetValue"){ | |
strErr = g_objAPI.SetValue(strFSArg1, strFSArg2); | |
CaptivateObj.SetVariable(strFSArg3, strErr); | |
} else if(strFSCmd == "Terminate"){ | |
g_bFinishDone = g_objAPI.Terminate(""); | |
strErr = g_bFinishDone; | |
CaptivateObj.SetVariable(strFSArg3, g_bFinishDone); | |
} else if(strFSCmd == "Commit"){ | |
strErr = g_objAPI.Commit(""); | |
CaptivateObj.SetVariable(strFSArg3, strErr); | |
} else if(strFSArg2 && (strFSArg2.length > 0)){ | |
if(strFSCmd == "GetLastError"){ | |
strErr = g_objAPI.GetLastError(); | |
CaptivateObj.SetVariable(strFSArg3, strErr); | |
} else { | |
strErr = g_objAPI[strFSCmd](strFSArg1); | |
CaptivateObj.SetVariable(strFSArg3, strErr); | |
} | |
} | |
return strErr; | |
} | |
function Captivate_DoExternalInterface(command, parameter, value, variable){ | |
var CaptivateObj = document.getElementById("Captivate"), | |
strFSCmd = new String(command), | |
strErr = "true", | |
strFSArg1 = parameter, | |
strFSArg2 = value, | |
strFSArg3 = variable, | |
courseStatus; | |
// do nothing, if SCORM API is not available | |
if(!isAPI()){ return; } | |
if(strFSCmd == "Initialize"){ | |
CaptivateObj.SetScormVariable(strFSArg3, g_objAPI.Initialize("")); | |
courseStatus = g_objAPI.GetValue("cmi.completion_status"); | |
if(courseStatus == "not attempted"){ | |
g_objAPI.SetValue("cmi.completion_status", "incomplete"); | |
} | |
} else if(strFSCmd == "SetValue"){ | |
strErr = g_objAPI.SetValue(strFSArg1, strFSArg2); | |
CaptivateObj.SetScormVariable(strFSArg3, strErr); | |
} else if(strFSCmd == "Terminate"){ | |
g_bFinishDone = g_objAPI.Terminate(""); | |
strErr = g_bFinishDone; | |
CaptivateObj.SetScormVariable(strFSArg3, g_bFinishDone); | |
} else if(strFSCmd == "Commit"){ | |
strErr = g_objAPI.Commit(""); | |
CaptivateObj.SetScormVariable(strFSArg3, strErr); | |
} else if((strFSArg2) && (strFSArg2.length > 0)){ | |
if(strFSCmd == "GetLastError"){ | |
strErr = g_objAPI.GetLastError(); | |
CaptivateObj.SetScormVariable(strFSArg3, strErr); | |
} else { | |
strErr = g_objAPI[strFSCmd](strFSArg1); | |
CaptivateObj.SetScormVariable(strFSArg3, strErr); | |
} | |
} | |
return strErr; | |
} | |
// Hook for Internet Explorer | |
if(swfobject.ua.ie){ | |
document.write("<script language=\"VBScript\"\>\n"); | |
document.write("On Error Resume Next\n"); | |
document.write("Sub Captivate_FSCommand(ByVal command, ByVal args)\n"); | |
document.write("Call Captivate_DoFSCommand(command, args)\n"); | |
document.write("End Sub\n"); | |
document.write("</script\>\n"); | |
document.write("<script language=\"VBScript\"\>\n"); | |
document.write("On Error Resume Next\n"); | |
document.write("Sub Captivate_DoExternalInterface(ByVal command, ByVal parameter, ByVal value, ByVal variable)\n"); | |
document.write("Call Captivate_DoExternalInterface(command, parameter, value, variable)\n"); | |
document.write("End Sub\n"); | |
document.write("</script\>\n"); | |
} | |
// This simply loops for a set period of time, waiting for the API to | |
// load and/or be found. A better solution would be to use setInterval | |
// and on the timeout, redirect or load the resulting Captivate file. | |
while(g_objAPI == null && timeCurrent_int < timeLimit_int){ | |
g_objAPI = getAPI(g_intAPIOrder); | |
timeCurrent_int = new Date().getTime(); | |
} | |
//If SCORM connection is active, append the following querystring to the URL | |
if(g_objAPI != null){ | |
strURLParams = "?SCORM_API=" + g_zAPIVersion + "&SCORM_TYPE=0"; | |
} | |
//swfobject.embedSWF has a built-in domready call, | |
//so it doesn't need to be wrapped in a window.onload event. | |
swfobject.embedSWF(strURLFile + strURLParams, "CaptivateContent", "641", "512", "10", false, flashvars, params, attributes, callbackFn); | |
window.onunload = Finish; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment