Mark Statkus edited this page Feb 9, 2016 · 122 revisions


So you just built some content, and then your client asks...

Hey, does this use SCORM??

Do you have to use SCORM? Absolutely not, but more often than not if a goal of portability is in mind, you'll need to adopt a popular and or widely adopted standard. The specifications numbers thousands of pages. So if your in a TL;DR (Too Long, Didn't Read) situation, this will lean things out to get you started. This all said though, much of the documentation for the project will expose you to all possible options. There are single pages in this Wiki dedicated to a specific scenario.

At its most highest level SCORM will look like a specification talking through Packaging, Communication and if you're using SCORM 2004 - Sequence and Navigation. This project focuses on the Communication portion from the content to the LMS Runtime API.

Where you seeking the LMS SCORM Runtime API?

Head over to https://cybercussion.com for more on the SCOBot Runtime APIs.

The purpose of the SCOBot Content API is to take the heat off of implementing SCORM in your content. I realize a lot of people are using 3rd Party tools now to construct content, but there are still quite a bit of people building custom games, quizzes and tests. Some are even migrating older content from Flash to HTML or SCORM 1.2 to SCORM 2004. Since the Runtime API is not only a line of communication, but it also enforces the SCORM specification. Read only, Write only and state and pattern based entries. The APIs are fairly basic allowing you to set and get data. But it doesn't format time values, set latency for you, or other patterns within the specification. These are all left to you to format and manage.

Scenarios will dictate how simple your implementation will go. You could be taking more advanced features within SCORM which will require more dependencies on your configuration settings, possibly on the Packaging specification and even requiring a content management system to tie it all in together.

  • Use the built QUnit in this project to test your LMS. Maybe even write your own SCORM tests specific to your needs.
  • Check out the console as mentioned prior. Even in local mode if you've included the Local_API_1484_11.js, you will see trace messages so you don't have to round trip the LMS with every change you make.
  • Try out the bookmarklet below to add some transparency as to what is being communicated.

You can visit the core of the documentation at SCOBot Documentation or about the SCORM CAM Packaging. I've also included some base Instructional value to some of the decision making that goes into an approach for building content. This will be on-going for a little while, but you can view that here.




I've added a free-to-use tool to add some transparency to SCORM called SCOverseer. This is a bookmarklet that will allow you to display values occurring in a SCO you are testing without having to wade thru seas of endless line items in the console, or logs on the LMS.


SCOverseer - see the Bookmarklet button on that page (drag it to your bookmarks bar). Directions on page.

SCOBot can use the console for logging if enabled, so that you can also "inspect element" and move to the "console" tab to view trace messages which can often be a great help.

SCOverseer Don't get caught with invalid packages. If you need to re-bundle vendor content or are looking for extra options constructing your Content Aggregation Models here is a Cross-Platform PC/Mac SCOBot Packager. SCOBot Packager

Cross Domain Warning

You may find yourself looking into this if your customer(s) desire to host their content from a central server using a different domain than your LMS. Try to look into the following:

  • Easiest and least complicated solution is to find out if you can point an HTML file to the CSS, JS, or other binaries to the media server? This would allow you to push a simple HTML file to the LMS, but it's taking all the assets from the media server. This gets around the cross-domain issue. This would also make your CAM packages very lightweight! This also would have to be done at Author-time or you would need to go back and point to CDN's or the media server. Other bonuses to this approach allow you to have a greater amount of caching vs. forcing the end user to download framework/libraries and other scripts over and over.
  • More Complicated Solutions in the past have used Flash, Java and IFRAME proxies to solve the issue. This begins to get more murky as you're talking about a LMS and Content API solution. Performance concerns arise if you have an extremely chatty course. Use of proxies and callbacks to get around the same origin policy security error have a cost.
  • AICC HACP may be another option to consider. Documentation

Accurate time in JavaScript?

I've done more cross-browser testing, and the QUnits I've setup will throw an error(s) on the latency if it doesn't match "PT5M" (which in english is 5 minutes). FireFox, and IE seem to throw different times up like 'PT4M59.55S'. So if you happen to be using the QUnit to test SCORM on a LMS or otherwise, don't be alarmed if you see differences in the browsers ability to report time. I've found a quick fix for this was to set milliseconds instead of set minutes against the Date object in JavaScript. So at least for the purpose of cross-browser unit tests, something to watch out for.
Performance test with some alternative time computations and showing the difference with division vs. multiplication.

Server-side Scripting Languages in SCO's

The "S" in SCO is shareable. So even if you know the LMS is using PHP, and you put a PHP file in your SCO, you could not take this SCO to a .NET or other server. You can point to a service however, but always be mindful not to limit the portability of your content. You may also even need to be aware of website blacklisting or firewalls/parental controls preventing the student from venturing outside of approved domains.

The Anti Library/Framework

It's very possible 90%+ of SCORM users treat the content like a "I was here" scenario. This is somewhat systemic of SCORM 1.2. You want to know they viewed your lecture video or otherwise. You may default them to 100%, passed and get an idea of how much time they spent viewing your Content Object. Due to the nature if trying to support SCORM 2004 and 1.2 this project hit 39KB packed. I've seen other libraries reach over 200KB+ in size. If performance is important to you, always consider whether you need to carry around an API set. If you are only using 5% of it, you may want to consider rolling your own. To that end, I built a quick page to comment on that approach.

SCORM Support/Guidance links