我如何引用另一个 LMS 的培训课程?

How can I reference a training course from another LMS?

我被要求制作一门可在一个基于云的学习管理系统 (brightspace) 中使用的课程,该系统可在其他学习管理系统中使用。目的是有人会在第三方学习管理系统 (LMS) 中打开课程,例如 Moodle,然后根据我所读的内容,将加载一个 iframe,其中包含由原始 LMS (Brightspace) 托管的课程.

我一直在研究这个,但我没有取得任何进展。 LMS 之间似乎有 oauth,但我无法解决。

如何创建一个包含中央 LMS iframe 的 SCORM 包?而且,是否有任何标准化的 LMS/SCORM 协议来处理身份验证或类似的东西?

谢谢!

将一个 SCORM 包嵌入到另一个 SCORM 包中不是可行的方法。 SCORM 制造商打算解决此问题的方法是导出 SCORM 包并将其导入第三方 LMS,因为这就是 SCORM 的全部内容。然而,这显然不是你想要达到的。

一般来说,SCORM 包只是一个打包的网站(带有清单),需要嵌入 LMS 提供 JS API。所以基本上,您可以在 SCORM 包中执行 "anything",例如创建 iframe、在 parent 浏览上下文中调用函数、打开弹出窗口等,只要不被同源策略等网络安全机制禁止。

理论上,如果您的 LMS 将提供包 "as is" 的内容并且没有身份验证,即您有一个 deep-link 到开始页面(想想 index.html) scorm 包(并且 LMS 不会发送保护性 headers,例如 X-Frame-Options),您通常可以将此页面嵌入到网络中的任何 iframe 中,从而嵌入到另一个 SCORM 包中。剩下的问题是同源策略,它会阻止位于 child 框架中的包调用 parent 框架中的 API。可能有一些技巧可以解决这个问题,例如通过使用转发到另一个域的同源反向代理,但这很可能不切实际或被其他机制禁止。 如果您可以解决这个问题,您仍然需要手动 pass-through/forward 从嵌入式包到您的 LMS 的 API 适配器的 API 调用。总的来说,这种做法并不是真的practical/feasible。

一般来说,SCORM 不处理身份验证。为此,请查看 IMS 学习工具互操作性 (LTI) 规范。它允许启动由另一方托管的 Tool/Content 并提供反向通道,例如成绩。

我认为 Rustici Software 的人提供了可以通过 LTI 启动的托管 SCORM RTE,您可能也想看看...

SCORM 带来的跨域乐趣

另一个快速解决“我的内容在另一个域上”的方法是引用媒体/内容服务器上的 JS/CSS,但在 html 上包含一个索引(播放器或启动)文件预期的 LMS,它可以在没有跨域问题的情况下引入这些内容。

因此,您重新打包的 SCO 将只有必要的启动文件,但在其中而不是“css/styles.css”,您指向的是“//domain.com” /路径/到/css/styles.css”。对 JavaScript 个文件重复相同的操作。

内容可能比 HTML 文档中静态定义的资产稍微复杂一些。如果是这种情况,可能需要进一步调整。

Wiki 这里有一些额外的提示https://github.com/cybercussion/SCOBot/wiki

我也会更新我向 SCOBot RTE 添加了一个跨域功能,它利用 IFRAME postMessage api 来启用从域 A 到域 B 的跨域通信。您必须能够将控制器与内容放在域 B 上。

GL