SCORM 1.0 / 1.2 LMSFinish 不调用

SCORM 1.0 / 1.2 LMSFinish not calling

我 运行 在使用 HTML5 SCORM 软件包时遇到了一些麻烦。

TL;DR; LMSFinish() 未被调用。 SCORM 中的 x.prototype.terminate() 也没有被调用,这让我相信这个包有问题。

LMSFinish() 应该在单击退出按钮(和/或 window 关闭时调用)。然而 console.log() 和 LMSFinish() 中的断点显示这没有被调用。

LMSInitialise 在 window 打开时很好,但是对于 LMSFinish,在检查 SCORM 内部的源代码并在 window.unload() 函数中放置断点后,我可以看到它只完成了一部分退出。

window.unload 调用 closeLms(),后者又 运行s 混淆了 x.prototype.terminate()。这个终止函数似乎在调用一些最终导致调用 LMSFinish() 的其他函数之前进行布尔检查。它永远不会那么远。 x.prototype.terminate() 中的布尔检查始终为假。如果我在控制台中将其设置为 true,则其他一些属性将不存在并且生成的函数调用将失败并出现错误。

有人知道为什么 SCORM 无法 运行 LMSFinish() 吗?测试 SCORM 包只有 3 张幻灯片,没有交互。

编辑:唯一编写的自定义 javascript 是 SCORM API 的挂钩(LMSInitialise、LMSFinish e.t.c)这些是从 javascript 在 SCORM 包中,由用户决定用于创建它的任何应用程序生成。 (口齿伶俐,引人入胜e.t.c)

根据您的浏览器和其他一些变量,附加到 window.unload 的代码并不总是 运行。

更好的方法是定期保存数据并设置保存和退出按钮,鼓励学习者在想要保存工作时点击该按钮。

你也可以看看window.onbeforeunload。

我终于想通了。对于可能遇到 SCORM 未按预期运行的问题的任何人。

在我的特殊情况下,LMSSetValue() 和 LMSGetValue() 只返回项目中需要的东西。事实证明,无论您是否使用它,它们都需要处理 SCORM 尝试设置和获取的每个值。

我简单地创建了一个对象作为 window.API{} 的 属性 并确保它以键值对的形式分配了 LMSSetValue() 上的所有值,然后这些值已准备好在 LMSGetValue() 检索。