After a somewhat longer time than I’d planned, here’s Rev 2.1 of the VSSCORM 1.2 RTE. It includes the following changes from Rev 2.0:
- Fix for the “cmi.score.raw” bug described in this post.
- Fix for the “ab initio” bug described in this post.
- Adds the “flagFinished” and “flagInitialized” variables to store API state information as discussed in this post.
You can download the code bundle using this link. |
If you’re upgrading, it should be pretty simple since the new files simply replace the old ones – no need to change the database or file structure.
Next time, some thoughts on where this project is taking me.
Hi Steve,
thanks a lot for your work, I read through the steps 1-27 today and now have a much better understanding of how the SCORM API really works. Just downloaded the code and installed the RTE on my local server to test a course which is giving me trouble. It really helps a lot to see the data in the DB. I just had to remove the API.LMSFinish calls from the frameset in RTE.php to make it work. As the course writes all data when it is closed, it doesn’t find the API anymore with these calls in place. Obviously they close down the API too early for this special SCO which runs in a separate window. The starting page of the course is just opens a new window and the SCO looks for the API in its opener.
I’ve just been working on a problem that another blog reader was having which also seems to be due to API.LMSFinish() being called too quickly. I think we were able to fix it by modifying ‘rte.php’ to include a delay. I added a function to the header of ‘rte.php’ like this:
function unloadSCO() {
var s = ”;
setTimeout(‘API.LMSFinish(‘+s+’);’,2000);
}
and then modified the ‘onbeforeunload’ and ‘onunload’ actions in the frameset tag like this:
… onbeforeunload=”unloadSCO();” onunload=”unloadSCO();” …
I’ll write this up in more detail but, if you try it out and it works, let me know!
Funny. I’ve had the opposite issue. I moved my database over to MSSQL and experienced course loading issues due to loss in performance (slow dev machine). Not all the course elements would load (missing buttons, images, etc). This was due to the fact that the ‘API’ frame was taking longer to load than the ‘course’ frame. So I modified ‘rte.php’ to do two things. First, load a blank page in the course frame, then redirect the course frame to my SCO start location after the ‘API’ frame is finished loading.
Here’s the JavaScript function:
var redirected = false;
function loadCourse() {
if (!redirected) top.frames[‘course’].location = ‘/courses/RealCourse/index.html’;
redirected = true;
}
Here are the modified frames:
<frame src="api.php?SCOInstanceID=” name=”API” onload=”loadCourse()” noresize>
Hopefully this will help someone else who is having the same issue… or better yet, spawn a more elegant solution. 😀
Thank you! I hadn’t come across that one.
I’ll take a closer look as soon as I can, but I’m glad that you found a workaround/solution and I really appreciate you posting the code for me to look at.
Pingback: Step 55 – Delaying Loading of the SCO | VSSCORM