Javascript SCORM 1.0/1.2 LMSFinish未呼叫

Javascript SCORM 1.0/1.2 LMSFinish未呼叫,javascript,api,scorm,scorm1.2,Javascript,Api,Scorm,Scorm1.2,我在HTML5 SCORM软件包方面遇到了一些麻烦 TL;博士未调用LMSFinish()。x、 SCORM中的prototype.terminate()也没有被调用,这让我相信包有问题。 LMSFinish()应该在单击退出按钮(和/或关闭窗口)时调用。但是,console.log()和LMSFinish()中的断点表明没有调用它 当窗口打开时,LMSInitialise很好,但是对于LMSFinish,在检查SCORM中的源代码并在窗口中放置断点之后。unload()函数我可以看到它只能部分

我在HTML5 SCORM软件包方面遇到了一些麻烦

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

LMSFinish()应该在单击退出按钮(和/或关闭窗口)时调用。但是,console.log()和LMSFinish()中的断点表明没有调用它

当窗口打开时,LMSInitialise很好,但是对于LMSFinish,在检查SCORM中的源代码并在窗口中放置断点之后。unload()函数我可以看到它只能部分退出

window.unload调用closeLms(),而closeLms()又运行模糊的x.prototype.terminate()。此终止函数似乎在调用其他函数之前执行布尔检查,最终导致调用LMSFinish()。它永远不会走那么远。x.prototype.terminate()中的布尔值检查始终为false。如果我在控制台中将其设置为true,则其他一些属性不存在,结果函数调用失败并出现错误

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


编辑:编写的唯一定制javascript是SCORM API的钩子(LMSInitialise,LMSFinish e.t.c),这些钩子是从SCORM包中的javascript调用的,由用户决定用于创建它的任何应用程序生成。(清晰,Captivate e.t.c)

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

一个更好的方法是定期保存数据,并有一个保存和退出按钮,如果学员想要保存他们的工作,您可以单击该按钮


您还可以查看window.onbeforeunload。

我最终解决了这个问题。对于任何可能与SCORM行为不符合预期的人

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


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

谢谢。但是,卸载代码是SCORM包的一部分。它是您在导出时铰接或Adobe Captivate创建的内容。当我期望那些不懂技术的客户来创建它们时,这不是我能控制的。此外,卸载函数正在运行,SCORM js中的其他内容正在停止执行。不是因为错误,而是一个错误的变量。可能与设置相关…?是否可能达到超时?也许可以观看网络活动并手动点击LMSCommit等,看看是否有一些明显的东西,关闭通常隐藏?那么它是一个故事情节包还是一个俘虏包?你能分享吗?@Andrewdowns它很迷人。我不能分享这个包裹,因为它属于我们的一个客户。有几个客户端在其软件包中报告了此问题,但由于我们编写的唯一代码是SCORM API LMSFinish(),其余代码是由Captivate生成的,因此我认为Captivate导致了此问题。body unload事件的常见问题。确保改用窗口。我通常为window.unload和onbeforeunload设置侦听器。您是使用自定义JavaScript处理SCORM还是使用第三方工具的代码?在你对安德鲁的评论中,你提到了清晰和迷人,但你的问题写得好像你自己在写JS一样。如果没有清晰的图片(和实际的代码),很难提供有用的反馈。很抱歉没有完全清楚,我已经编辑了这篇文章以包含更多的信息。我无法提供导致问题的软件包。我只能假设应用程序(Adobe Captivate)生成的包的设置阻止了LMSFinish的代码执行。或者类似的东西。我希望有人以前见过这个。