如何处理丢失的 SCORM 2004 API 实例

How to deal with lost SCORM 2004 API instance

我有一个相当简单的内部 LMS。它主要由处理启动课程的 ASP.Net 页面和 SCORM 2004 API 的 javascript 实施组成。 javascript 实现包含在 ASP.Net 启动器页面中,使用头部部分中的简单包含。

当页面在新 window 中启动符合 SCORM 的课程时,它使用标准 SCORM API 搜索算法并将 SCORM API 的实例定位在LMS 课程启动器页面。到目前为止,这都是非常标准的 SCORM 行为,没有任何异常。

我遇到的问题是,如果出于某种原因刷新启动器页面,那么 API 实例就会丢失,并且课程不再能够与 API 进行通信.我已经回到 SCORM 2004 标准文档,但在其中找不到任何关于 SCO 在这种情况下应该做什么的内容。

这只是 SCORM 架构的限制,还是我可以在我的实施中做些什么来防止这种情况发生?

再次尝试搜索 SCORM API 并重新初始化是 SCO 的责任吗?

我知道有很多实施 SCORM 的 LMS,我想知道是否有人知道他们实施了什么方法来防止这种情况发生(如果有的话)?

有没有熟悉 SCORM LMS 架构的人有任何建议来防止重新加载打开页面时丢失 API 实例?

这里的主要问题是一旦播放器 window 刷新,内容 window 与播放器之间的 window.opener 关系将不再有效。即使您可以让内容再次尝试其 API 搜索算法,它也不会因此工作。

另一种方法是在播放器 window 为 refreshed/closed 时强制退出内容。我在一家生产非常受欢迎的 SCORM 播放器的公司工作,这就是我们走的路。

当您的播放器页面打开包含其中内容的 window 时,您可以在变量中保留对该新 window 的引用。然后在您页面上的 beforeunload/unload 处理程序中,您可以检查内容 window 是否仍处于打开状态并将其作为退出例程的一部分关闭。

虽然这与您想要的结果不尽相同,但它确实阻止了学习者在他们的进步实际上不会持续的状态下继续与内容互动。