I want to validate if a scorm package supports resuming or not once it has been uploaded into my content library. How to validate that without launching the scorm package and accessing the cmi.suspend_data?
There isn't a way to determine this because there is no way to know which of the SCORM RTE calls will be made by a piece of content simply from the manifest, or even the included code. This is effectively the halting problem.
Related
We have built an LMS system and we are struggling to make it SCORM compliant. We are trying to run any SCORM package from another LMS and pass the collected data to our own LMS so that we can track the progress. We have tried SCORM runtime api and found https://github.com/skfriese/simple-scorm-api this is the most complete and relevant api so far. The issue is that the SCORM packages we have come up with are all different and they are not emitting all the information more importantly cmi.suspend_data to runtime api. We have made two separate implementations, one downloaded from https://scorm.com/ is giving up all the information including suspend_data and another downloaded from https://www.easygenerator.com/ not working at all while both are SCORM 1.2 compliant and runtime api coding with js are the same.
There is a "Launch SCO" link at the top left corner of the page you need to click to kick off the experience.
I have ensured that the package from easygenerator is working by uploading that into the https://moodle.org/ and it worked fine there, and I have tried hand coding the whole api thing even then it did not work. Can someone shed some light or show an working runtime api example which will work globally for all the SCORM packages.
Download link for easygenerator SCORM package (not working) - https://scorm.staging-websites.com/easy2.zip
Sample from scorm.com (working) : https://scorm.staging-websites.com/SL360_LMS/API_new.html
Sample from easygenerator.com (not working) : https://scorm.staging-websites.com/easy2/API_new.html
I'm new to SCORM, I'm planning to implement an export-to-SCORM feature.
Currently, playing the content (which is not a SCORM player) is like a small HTML5 web app, and as part of its implementation, it uses features like AJAX for example to lazy load some files (JS files, CSS files).
I was thinking to just have a way to use the same player code when creating the SCORM course.
Are SCORM courses required to work offline or from disk?
If that's the case, using the techniques, like the lazy load I described above, won't work.
I imagine there could be some SCORM player mobile apps which store and load SCORM course on the device and a web-server is not available so that AJAX could work. (Or are these mobile apps actually implementing a local web-server within themselves in order to play the SCORM content?)
AFAIK, SCORM 1.2 or 2004 doesn't specifically put any restriction whether AJAX could be used in the presentation layer of the SCORM content, but in practice, when content is played in a player it obviously matters.
SCORM courses are not required to work offline or from disk (depending on what that means), which isn't to say they can't. SCORM courses are expected to load the initial resource from the location that they've been imported to, so while AJAX to a different location could work there are issues with security (credentials can't be secured or trusted), 3rd party loading, etc. Unless you were going to AJAX back to the loading host to retrieve content shipped with the package which should work and there are mechanisms that can be used to increase security for content retrieval.
The one offline implementation of a SCORM player that I'm familiar with (Rustici Software's) requires the packages to be all inclusive because there is no web server available. Again, that isn't to say that it couldn't be implemented with one, just that I'm not aware that such a thing has been implemented.
I've been asked to make a course that is available in one cloud-based learning management system (brightspace) available in other learning management systems. The intent is that someone would open the course in the third party learning management system (LMS), like Moodle, and then from what I've read, an iframe would load that would contain the course as hosted by the original LMS (Brightspace).
I've been researching this all day and I haven't made any headway. It seems like there is oauth between the LMS' but I can't work it out.
How can I create a SCORM package that will contain an iframe to a central LMS? And, is there any standardised LMS/SCORM protocol that handles authentication or something like that?
Thanks!
Embedding a SCORM package inside another SCORM package is not the way to go. The solution for this problem as intended by the makers of SCORM would be to export the SCORM package and import it in the third party LMS, because thats what SCORM is all about. However, this is obviously not what you want to achieve.
In general, a SCORM package is simply a packaged website (with a manifest), which requires a JS API to be provided by the embedding LMS. So basically, you can do "anything" inside a SCORM package, e.g. creating an iframe, calling functions in the parent browsing context, open a popup etc., as long as it is not prohibited by web security mechanisms such as the same origin policy.
In theory, if your LMS would serve the content of the package "as is" and without authentication, i.e. you have a deep-link to the start page (think index.html) inside the scorm package (and the LMS would not send protective headers such as X-Frame-Options), you would be generally able to embed this page in any iframe in the web, thus within another SCORM package. The remaining problem would be the same origin policy, which would prevent the package sitting in the child frame from calling the API in the parent frame. There might be some tricks to work around this, e.g. by using a reverse proxy under the same origin that forwards to the other domain, but this will most likely be not practical or prohibited by other mechanisms. If you can work around this, you would still have to manually pass-through/forward the API calls from the embedded package up to your LMS's API adapter. Overall, this approach is not really practical/feasible.
In general, the SCORM does not deal with authentication. Please have a look at the IMS Learning Tools Interoperability (LTI) specification for that purpose. It allows to launch a Tool/Content hosted by another party and provides backchannels for e.g. grades.
I think the guys from Rustici Software provide a hosted SCORM RTE that can be launched via LTI, you may want to have a look at that, too...
Cross domain fun with SCORM
Another quick work around to "my content is on another domain" is to reference the JS/CSS on the media / content server, but include an index (player or launch) html file on the intended LMS which can bring those in without the cross-domain issues.
So your re-packaged SCO would just have the necessary launch file but inside that instead of the "css/styles.css" you're pointing to "//domain.com/path/to/css/styles.css". Repeat the same for JavaScript files.
It may be possible the content is a little more complicated than just statically defined assets in a HTML document. If that is the case it may take some further adjustments.
Wiki here has some extra tips https://github.com/cybercussion/SCOBot/wiki
I'll also update I added a cross domain feature to the SCOBot RTE which utilizes IFRAME postMessage api's to enable cross domain communication from domain A to domain B. You would have to be able to place the controller on domain B with the content.
GL
I am creating SCORM/Tincan packages from html/js and and testing using SCORM Cloud. I am unsure of how an LMS will store user data resulting from the usage of such a package.
Do I need to provide extra coding with the package.. e.g. use certain api statements in order to instruct the LMS to store the user data or is this done automatically? Does an LMS open a course/package in the 'context' of a user and then store his her/results.. or is there extra implementation work that needs to be in place to make this persistence happen?
This is a very general question, but I think the answer is 'no' for both SCORM and Tin Can. The LMS will launch content for a particular user. For Tin Can at least, you'll need to take the user information provided by the LMS and ensure the data you store is stored against that user. If you are using a code library, that code library may handle this for you if used correctly. http://tincanapi.com/libraries
I'm very new to SCORM and i'm not entirely sure if i'm even asking this question correctly so please pardon my newness. I have been tasked with implementing a SCORM "previewer" functionality into a website we're building.
I won't need any of the extended features that i understand are provided by the SCORM wrapper such as LMS integration and testing, but simply the ability to preview the images and flash files as they were created by the author of the SCORM package.
We have additional requirements that prevent us from using an external cloud-based solution.
Is this possible? Am i completely misunderstanding the way this works?
The SCORM specification defines a Content Aggregation Model (CAM) and RunTime Environment (RTE). The CAM isn't relevant to your question but the RTE might. The RTE defines how SCORM content communicates with an LMS.
It sounds like in your 'previewer' application, you don't want to store any data in the LMS. For some SCORM packages, this will mean there is no work to do at all as you don't need to implement anything to store no data!
Other SCORM packages will expect a response from the LMS and will error if they don't receive one. I suspect this is what is happening in your case and why you have been tasked with creating a previewer application. You will therefore need to work out which SCORM data the package is sending, catch those requests and return the expected response. See scorm.com for an overview of the Run Time Environment.
If you need a more generic solution that will work with any SCORM package, I fear you will need a complete SCORM implementation. This will be a LOT of work to do yourself. I would normally recommend SCORM Cloud but you say you need an internally hosted solution. If this preview application is likely to be well used and/or customer facing, you should take a look at SCORM Engine. If not, perhaps consider hosting an Open Source LMS such as Moodle?