Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Captivate SCORM 2004 Output, slight JavaScript cleanup
// set document.domain property here, if it works for your environment/SCORM implementation
// document.domain="";
var g_intAPIType = 0;
// Hook for Internet Explorer
if((navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) || g_intAPIType == -1){
g_intAPIType = 0;
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');
} else {
g_intAPIType = 0;
}
var strURLFile = "sample.swf"; // Name of the flash file
var intIntervalSecs = 1; // Number of seconds to wait for SCORM API to load
var g_intAPIOrder = 0; // Way to search for API object (0 - starts with bottom up; 1 - starts top down)
var strURLBase = "";
var strURLParams = "";
var strURLFull = document.location + "";
var intTemp = strURLFull.indexOf("#");
if(intTemp == -1){
intTemp = strURLFull.indexOf("?");
}
if(intTemp > 0){
strURLParams = strURLFull.substring(intTemp + 1, strURLFull.length);
}
var strTemp = location.protocol.toUpperCase();
if(strTemp.indexOf("FILE") == -1){
var intTemp = location.pathname.lastIndexOf("/");
} else {
var intTemp = location.pathname.lastIndexOf("\\");
}
if(intTemp != -1){
strURLBase = location.protocol + "//" + location.host + location.pathname.substring(0, intTemp + 1);
} else {
strURLBase = location.protocol + "//" + location.host + location.pathname;
}
strURLParams = (strURLParams==unescape(strURLParams)?escape(strURLParams):strURLParams);
strURLParams = (strURLParams==""?"":"?") + strURLParams;
function Finish(){
if((isAPI()) && (g_bFinishDone == false)){
(g_zAPIVersion=="0.2"?g_objAPI.LMSCommit(""):g_objAPI.Commit(""));
g_bFinishDone = (g_zAPIVersion=="0.2"?g_objAPI.LMSFinish("") == "true":g_objAPI.Terminate("") == "true");
}
return (g_bFinishDone + ""); // Force type to string
}
if(g_intAPIType==0){
// Detect Internet Explorer
var g_bIsInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
// Handle fscommand messages from a Flash movie
function Captivate_DoFSCommand(command, args){
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate;
var strFSArgs = new String(args);
var strFSCmd = new String(command);
var strErr = "true";
var strFSArg1, strFSArg2, strFSArg3
var intFSDelimiter = strFSArgs.indexOf("|");
if(intFSDelimiter > -1){
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API
var 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 == "LMSInitialize" || strFSCmd=="Initialize"){
CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");'));
} else if(strFSCmd == "LMSSetValue" || strFSCmd=="SetValue"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");');
strErr = g_bFinishDone;
CaptivateObj.SetVariable(strFSArg3, g_bFinishDone);
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else if((strFSArg2) && (strFSArg2.length > 0)){
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){
strErr = eval('g_objAPI.' + strFSCmd + '();');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else {
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
}
} else if(strFSCmd.substring(0,3) == "LMSGet"){
strErr = "-2: No Flash variable specified";
}
return strErr;
}
function Captivate_DoExternalInterface(command, parameter, value, variable){
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate;
//alert("command " + command + " ;parameter " +parameter+ " ;value " + value + " ;variable " + variable);
//var strFSArgs = new String(args);
var strFSCmd = new String(command);
var strErr = "true";
var strFSArg1, strFSArg2, strFSArg3;
strFSArg1 = parameter;
strFSArg2 = value;
strFSArg3 = variable;
/*var intFSDelimiter = strFSArgs.indexOf("|");
if(intFSDelimiter > -1)
{
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API
var 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 == "LMSInitialize" || strFSCmd=="Initialize"){
//CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");'));
CaptivateObj.SetScormVariable(strFSArg3,eval('g_objAPI.' + strFSCmd + '(\"\");'));
var courseStatus = eval('g_objAPI.' + 'GetValue' + '(\"' + "cmi.completion_status" + '\");');
if(courseStatus == 'not attempted'){
eval('g_objAPI.' + 'SetValue' + '(\"' + "cmi.completion_status" + '\",\"' + 'incomplete' + '\");');
}
} else if(strFSCmd == "LMSSetValue" || strFSCmd == "SetValue"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");');
strErr = g_bFinishDone;
//CaptivateObj.SetVariable(strFSArg3, g_bFinishDone);
CaptivateObj.SetScormVariable(strFSArg3, g_bFinishDone);
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else if((strFSArg2) && (strFSArg2.length > 0)){
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){
strErr = eval('g_objAPI.' + strFSCmd + '();');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else {
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
}
} else if(strFSCmd.substring(0,3) == "LMSGet"){
strErr = "-2: No Flash variable specified";
}
return strErr;
}
}
var timeCurrent_int = new Date().getTime();
var timeLimit_int = new Date().getTime() + (intIntervalSecs * 1000);
// 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(g_objAPI != null){
strURLParams = "?SCORM_API=" + g_zAPIVersion + "&SCORM_TYPE=" + g_intAPIType;
}
window.onload = function (){
var so = new SWFObject(strURLFile + strURLParams, "Captivate", "641", "512", "10", "#CCCCCC");
so.addParam("name", "Captivate");
so.addParam("bgcolor","#f5f4f1");
so.addParam("menu", "false");
so.write("CaptivateContent");
document.getElementById('Captivate').focus();
document.Captivate.focus();
};
window.onunload = Finish;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.