将 SCORM 包转换为在外部服务器上运行的最简单方法?

问题描述 投票:0回答:1

我创建了一个 SCORM 包(没有创作工具),其中 ismmanifest.xml 指向外部服务器上的内容。

但是,使用的LMS(Cornerstone)不支持SCORM中的外部内容!

有没有一种简单的方法可以将 SCORM 包转换为 xAPI、AICC、cmi5 等可以在 LMS 之外的外部服务器上运行内容的内容?

在第一次尝试中,我想使用 xAPI,但失败了,因为它需要用户身份验证,但我既无法访问 LMS,也无法访问应运行内容的外部服务器。我只创建了内容和包。

感谢您的帮助

scorm cornerstone lms xapi
1个回答
0
投票

您无法通过 imsmanifest 文件指向外部内容,因为外部 HTML 文件将位于不同的域中,并且由于跨域安全限制而无法通过 JavaScript 与 LMS 通信。

我在类似情况下所做的就是创建一个中继系统,在其中加载课程 ZIP 中的单个 HTML 文件,并通过 iframe 将外部内容加载到该 HTML 文件中。 index.html 文件处理与 LMS 的所有 SCORM/JS 交互,因为它与 LMS 位于同一域中。诀窍是使用 postMessage (或类似的)来让子页面指示 index.html 文件代表它们触发 JS 命令。

假设您能够修改课程文件和 SCORM ZIP,以下是其工作原理的总体概述:

创建一个位于 SCORM 包中的 index.html 文件。让 imsmanifest 指向此文件作为课程的启动文件。

在index.html 文件中,创建一个100% 填充视口的iframe。这使得最终用户感觉 iframe 不可见。

根据课程逻辑的需要,使用 JS 将外部文件动态加载到 iframe 中。

将 SCORM 支持代码(例如 SCORM 包装器)添加到 index.html 文件中。它将为您处理 SCORM 连接和所有命令(init、get、set、terminate 等)。外部文件不会使用任何 SCORM 代码,也不会与 LMS 交互——外部页面只会通过 postMessage 与 index.html 文件交互。

当课程页面需要进行 SCORM 调用时,让它通过 postMessage 将命令转发到您的 index.html 文件,例如

const message = JSON.stringify({ bookmark: 2 });
//Replace lms.com with the domain of your LMS for security purposes
window.parent.postMessage(message, 'https://lms.com');

在您的index.html 文件中,您将侦听消息并进行相应的处理。 (示例代码,未经测试——需要错误处理)

window.addEventListener('message', function(event) {
    //Replace example.com with the domain of your external files for security purposes
    if (event.origin === 'https://example.com') {
        const data = JSON.parse(event.data);
        switch(Object.keys(data)[0]){
            case "bookmark":
               //In this example I'm using my pipwerks SCORM wrapper
               pipwerks.SCORM.set("cmi.core.lesson_location", data[0]);
               break;
            case "exit":
               pipwerks.SCORM.exit();
               break;
            // etc.
        }
    }
});

我已在多个 LMS 平台上成功使用这种方法多年。这种方法有很多额外的好处,包括:

  1. SCORM 包非常轻量级
  2. SCORM 包永远不需要再次接触——不会弄乱 LMS 中的版本控制
  3. 您可以将 SCORM 包发送到任意数量的 LMS,同时在外部服务器上仅保留一份课程文件副本。如果您需要更新课程,只需在一处进行更改,它就会立即反映在所有地方。
© www.soinside.com 2019 - 2024. All rights reserved.