我一直在使用HTML5 SCORM软件包遇到麻烦。
TL; DR; LMSFinish()未被调用。 SCORM中的x.prototype.terminate()也没有被调用,这让我相信包的问题。
LMSFinish()应该在退出按钮单击(和/或窗口关闭)时调用。然而,LMSFinish()中的console.log()和断点表明它没有被调用。
当窗口打开时,LMSInitialise很好,但是对于LMSFinish,在检查SCORM中的源并在window.unload()函数中放置断点后,我可以看到它只是退出的一部分。
window.unload调用closeLms(),然后运行模糊的x.prototype.terminate()。在调用一些最终导致调用LMSFinish()的其他函数之前,此终止函数似乎执行布尔检查。它永远不会那么遥远。 x.prototype.terminate()中的布尔检查始终为false。如果我在控制台中将其设置为true,则其他一些属性不存在,并且生成的函数调用失败并显示错误。
有没有人知道为什么SCORM会无法运行LMSFinish()?测试SCORM包只是3张幻灯片,没有互动。
编辑:唯一编写的自定义javascript是SCORM API的钩子(LMSInitialise,LMSFinish等)这些是从SCORM包中的javascript调用的,由用户决定用来创建它的任何应用程序生成。 (Articulate,Captivate e.t.c)
答案 0 :(得分:0)
根据您的浏览器和其他一些变量,附加到window.unload的代码并不总是运行。
更好的方法是定期保存数据,并设置保存和退出按钮,鼓励学员点击以保存他们的工作。
您还可以查看window.onbeforeunload。
答案 1 :(得分:0)
我最终想到了这一点。任何可能遇到SCORM问题的人都没有按预期行事。
在我的特定情况下,LMSSetValue()和LMSGetValue()只返回项目中需要的东西。事实证明,无论您是否使用它,它们都需要处理SCORM尝试设置和获取的每个值。
我简单地创建了一个对象作为window.API {}的属性,并确保在键值对中为LMSSetValue()分配了所有值,然后这些值就可以在LMSGetValue()处进行检索。