thoughtasylumTOOLBOX Preview

Tools › E-learning

Package Player

Run a SCORM package in your browser against a test LMS that logs every API call, checks each value against the SCORM data model, and lets you change the stored values and relaunch to test resuming. It can also check each page for accessibility problems.

About this tool What it's for, how to use it and an example

What it's for

Run a SCORM 1.2, SCORM 2004, AICC (HACP) or cmi5 package in your browser, without uploading it to a learning management system (LMS). The Player acts as a small test LMS: it answers the package’s calls, logs each one, and keeps the values the content stores. That makes it a quick way to debug bookmarking and resuming, completion and score reporting.

For example, when a course doesn’t resume where the learner left off, or the LMS shows it as incomplete after a pass, launch it here to see exactly which values it sets, and in what order.

Open only packages you trust. The content runs on this site’s own address, so it could read your tool settings here. More about this.

How to use it

Choose a ZIP, or drop one on the page. It’s unzipped into your browser, not uploaded, and the files are deleted when you close the page or open another package. Content can’t load anything from, or send anything to, other sites unless you tick Allow external resources; that applies from the next launch.

Set the Learner ID, Learner name, Credit and Mode the content will be told about (they’re remembered in this browser). Choose an item and press Launch. It opens below, or in a separate window if you tick New window (also remembered). The Launch URL appears, with a Copy button. Close ends the session: if the content hadn’t called LMSFinish or Terminate, the Player calls it and says so in the log. Items marked (asset) are plain pages that never call the SCORM API, so they leave the log and stored values empty; only SCOs are tracked.

  • API calls logs each call with its time, element, value, result and error. A failed call shows its error code and a diagnostic, and session and total times are also written out in hours, minutes and seconds. Filter narrows the list, Clear empties it, and Save as CSV downloads it.
  • Stored values shows what’s kept for the chosen item. Change a value, or add one with Set, and it takes effect at once. Start a new attempt forgets them all, and Save the values (JSON) downloads them.
  • Resuming works as an LMS does: if the last session’s exit was suspend, the next launch has the entry resume and keeps its values. Otherwise the next launch starts a new attempt.
  • AICC units are launched with aicc_sid and aicc_url added, and the Player answers GetParam, PutParam, PutInteractions, PutObjectives, PutPath, PutPerformance, PutComments and ExitAU. Each command is logged.
  • cmi5 units get the launch parameters (endpoint, fetch, actor, registration and activityId). The fetch URL gives its token once only. The Player also supplies the LMS.LaunchData state document and the learner preferences. The statements the unit sends are listed with the Statement Validator’s checks, with the LMS’s own launched and satisfied statements, and a line says whether the unit’s moveOn is met. This is a test mode: statements stay in the page, and Save the statements (JSON) downloads them.

Check the page shown runs axe-core, the accessibility checker, on the page the content is showing (frames inside it included) and lists the rules it breaks, worst first, with the elements and a link to each rule’s explanation. Run it again on each page you want checked. The checker is fetched from this site the first time.

Example

Save this as imsmanifest.xml:

<?xml version="1.0" encoding="UTF-8"?>
<manifest identifier="fire-safety" version="1.0"
  xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
  xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2">
  <metadata>
    <schema>ADL SCORM</schema>
    <schemaversion>1.2</schemaversion>
  </metadata>
  <organizations default="org1">
    <organization identifier="org1">
      <title>Fire Safety</title>
      <item identifier="item1" identifierref="res1">
        <title>Fire Safety Basics</title>
      </item>
    </organization>
  </organizations>
  <resources>
    <resource identifier="res1" type="webcontent" adlcp:scormtype="sco" href="index.html">
      <file href="index.html"/>
    </resource>
  </resources>
</manifest>

Save this beside it as index.html:

<!doctype html>
<title>Fire Safety Basics</title>
<script>
  var api = parent.API
  api.LMSInitialize("")
  api.LMSSetValue("cmi.core.lesson_status", "completed")
  api.LMSSetValue("cmi.core.score.raw", "120")
  api.LMSFinish("")
</script>

Select the two files (not a folder holding them), zip them, and choose the ZIP. Press Launch. The API calls table shows four rows, with the result in the fifth column:

  • LMSInitialize with an empty value: true.
  • LMSSetValue of cmi.core.lesson_status to completed: true.
  • LMSSetValue of cmi.core.score.raw to 120: false, shaded as an error, with the error 405 “120” doesn't suit cmi.core.score.raw (a number from 0 to 100).
  • LMSFinish: true.

The stored values then show cmi.core.lesson_status as completed and cmi.core.score.raw still empty, because the invalid score wasn’t stored. Launch again and the content runs as a new attempt, since it didn’t set its exit to suspend.

Good to know

Automatic accessibility checks find some problems, not all: reading order, captions and whether alt text makes sense still need a person.

The Player needs the site’s service worker, which some private windows block. On a first visit it may still be starting, so if it says so, reload the page and choose the package again. Content on another site, such as an AU or resource hosted elsewhere, can’t be played, and an AICC unit on another site can’t reach the test LMS.

SCORM 2004 sequencing rules and navigation requests (adl.nav.request) are stored but not acted on, so the Player doesn’t move between SCOs by itself. Interaction responses are checked for length only, not against the interaction’s type. Everything is kept in the page’s memory, so reloading it loses the log and the values unless you’ve saved them. To see what’s inside a stored cmi.suspend_data, paste it into the Suspend Data Decoder.

Open only packages you trust. A package’s content runs on this site’s own address, so it could read your tool settings here. It can’t reach other sites unless you allow external resources below. More about this

Private: this tool runs in your browser. Nothing you type, paste or choose leaves this page.

Saved you a few minutes? Say thanks with a coffee.

Something wrong with this tool, or missing from it? Report a bug or suggest a feature.

↑ ↓ move↵ openesc close