Search code examples
javascriptscormtin-can-apiscorm1.2

What is good way to render scorm 1.2 package in a web page?


We have some scorm 1.2 content hosted in our server and would like to integrate in our website. I didn’t find any good article that explains how to do it right way. I found lot of articles/tutorials explaining various apis and events about Scorm 1.2, Scorm 2004 and TinCan but none about integrating content in a html page.

Are there any good javascript libraries (scorm players?) that actually reads imsmanifest.xml file and render content?


Solution

  • There are a lot of questions like this on StackOverflow. And the web in general.

    Server side Recipe:

    1. Serverside script to allow the upload of a zip or FTP/SFTP, scp etc...
    2. Serverside script to Unzip a Zip file (optional)
    3. Serverside script to parse the imsmanifest.xml (one to many content objects)
    4. SQL or NOSQL DB to store data (optional)
    5. You need to control any launch data, and parameters as well as thresholds defined in the imsmanifest.xml required to launch the content.

    Client Side Recipe:

    1. You probably will want a UI for login/user management and assignments
    2. Shareable Content objects commonly run within IFRAMEs, popup windows, new tabs or windows. Determine how you want to launch them.
    3. You'll need a JavaScript SCORM Runtime exposed "API" for 1.2. You'll need to read up on the CMI Object and its namespaces/rules. Don't worry, most the specification is optional.
    4. You'll need to use AJAX to submit the student attempt when they call commit. You'll want to control this with a 'sync' call in cases where the student has closed their browser, or was navigated away from your site. Else, you'll lose their data.
    5. You could get away with localStorage vs the server side storage of data depending on your goals.

    General flow for your site is to wait for the student to choose an assignment. Load their CMI Object (clean/new or suspended/resumed). Then load the SCO, wait for them to make calls against your JavaScript API.

    Be very careful about not round tripping your back end on get and set value requests. Use the commit to do that so your not spamming your backend.