-
Notifications
You must be signed in to change notification settings - Fork 34
Home
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.
Developers, The purpose of this is to take the heat of implementing SCORM in your content. I realize a lot of people are using 3rd Party tools now to construct content, but I know there are still quite a bit of people building custom games, quizzes and tests. This project is meant to encompass as full implementation capability of SCORM 2004 covering all the basics, plus supplying friendly API's to allow you to more easily record Interactions, Objectives and roll up the scoring. I wanted to trim down the round trips to updating, zipping and uploading content just to see if your SCORM call works. So a couple notes on this:
- 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 when all is hidden in the black box that is the LMS.
- Project was geared at SCORM 2004, but will fall back to SCORM 1.2. Although, due to character limits, and consolidated statuses within the specification, it may require scrutiny. There is a SCORM Breakdown PDF linked below to gauge the impact.
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 beta tool used 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.
SCOZipper - (Mac only). Are you sick of zipping up each SCO by hand, only to find out the LMS is complaining about how you zipped it? Need to just re-zip a bunch of SCO's you edited in a directory? Launch it, choose Folders, highlight the SCO(s) you want to zip and hit "Choose". It will zip up each directory and ignore (.bak, .old, .DS_Store, .svn, .git) files. If you have any requests or feedback, let me know.
Cross-Platform PC/Mac SCOBot Packager in beta.
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.
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.
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.
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.
It's important to note if you are using the full SCOBot package, it is locating the LMS Runtime. All to often the rest of your page is in the process of loading, and in some cases if you don't wait for the 'load' event from SCOBot, you may end up in an out-of-order situation. Do not begin to communicate with SCOBot until 'load is fired. Typically, its recommended you do not initiate your content presentations until that occurs, or create some management to make sure it occurs. This includes plugins, or other presentation technology like WebGL, Canvas etc ... The Asynchronous nature of loading assets and resources is fine, but in this case, your presentation is relying on a prepared connection to the LMS Runtime, just like it may rely on external data (JSON, XML, CSV or otherwise).
Protocol-relative paths is where you opt to ship with a protocol free script or asset reference. If you package up the QUnit tests and they all point to http and serve the SCO on a https connection any CDN or media server request will fail. Switch the paths to "//" vs "http://" and now it will work for http and https. However, now locally this will fail because it's looking for file:// and these files aren't locally. Things to keep in mind.
Any HTML links possibly used by bootstrap buttons or other, may cause a '#' to get tacked on to your SCO. This can often cause a false positive and may cause your SCO to terminate due to the unload event firing. Workaround:
e.preventDefault(); // in button click function
The LMS had a HTTPS / SSL and it was reported on IE 8. There are some documented issues with the cache header in this situation. Common fix, is to correct the servers headers. Documented link - no-cache issue via HTTPS/SSL
ActiveX Filtering can prevent it working. More on this here
It was spotted that certain legacy mozilla deployments were having issues with the JavaScript event 'on unload' firing on the body tag. SCOBot shifts this to 'window' instead, but for IE 8 'document' is used for reliability. This is now managed through SCOBotUtil.js, and is baked in if you use the full SCOBot package. This is a fairly popular issue with other libraries.
In order for some legacy LMS systems to attempt to research who/what is calling the SCORM API/API_1484_11, they make this reference. With the compiled SCOBot packed or minified code this will fail. Work around would be to download the source code, and remove the "use strict";
statement from the function objects. See
Strict Mode.
SCORM 1.2 uses a single 'lesson_status' which comprises of 'passed, failed, completed, incomplete'. Due to this, some LMS systems will not mark the SCO completed as a result if the last status was 'passed'.
Utilizing file types like JSON on a legacy system may pose an issue. Because of this it's normally recommended you use '.js' vs '.json' to keep your compatibility/portability up. You may even be using a RESTful API which speaks JSON and when you request the file it causes issues. These area all issues that occur server-side so they may be more challenging to get fixed.
This commonly occurs on some platforms that have implemented a non-cached Student Attempt via the Runtime API. The end result can commonly be an hour glass or beach ball spinning with no real reason why you can click on buttons or scroll. This video dives a bit more into it at a high level.
- SCOBot SCORM Standards Breakdown
- ADL SCORM 2004 3rd Edition
- Claude Oystn
- Visual Guide SCORM 1.2 & 2004
- SCORM Poster Please note: at the time I linked this there are some discrepancies in this document.
- Brandon Bradley's XMind Diagram
- Gist example: CMI Object Post session
- LMS Runtime
- Test Wrapper
Any issues, concerns or feedback - make contact