编程语言
首页 > 编程语言> > javascript – Captivate – LMS – SCORM通信问题

javascript – Captivate – LMS – SCORM通信问题

作者:互联网

我正在开发符合SCORM的LMS,并且在Captivate生成的内容方面存在一些问题.

基本上,行为是:如果你看到一个SCO(吸引生成的内容),例如每张幻灯片中有15张幻灯片和1个问题,我的lms不跟踪所有15个问题,只跟踪前3个或4个.如果你等了很长一段时间,或者如果你把内容放慢,它工作正常.

经过大量的谷歌搜索,调试和追踪,最后,我发现了两个主要问题:

1)Captivate – SCORM API通信是异步的(与flash-javascript通信相同).因此,当用户快速看到内容时,函数调用变得越来越失败,并且最后,用户可能正在回答问题15,并且内容正在发送问题4信息.我无法更改Flash或JS-Flash界面,因为这是由Captivate提供的.

有一种方法可以实现这种同步吗?我的意思是,迫使闪光灯等一些方式?

2)每次调用函数都需要更长的时间,例如,setValue第一次需要7毫秒,最后一次需要调用200.

要理解这个问题,这里有一点背景:
Captivate内容(所有内容确实但更具吸引力)多次调用特定函数,即SetValue函数,SCORM API函数之一.此函数接受两个参数(fieldName,value),第一个是要设置的字段的名称,第二个是新值.在我的实现中,此函数首先使用正则表达式验证值,然后在对象中设置值.

好的,我可以添加更多信息,但我不知道什么是真正重要的,我不希望你修改我的代码而不看它,但我没有想法,需要新的意见,想法,方向….也许那个sombody问正确的问题……帮助:)

谢谢

最佳答案:

发布SCORM时,Captivate不使用同步通信方法.*根据浏览器的不同,Captivate使用FSCommand或old-school getURL方法与HTML文件通信;然后,HTML文件使用JavaScript通过SCORM API将数据中继到LMS.

响应(如果有)从JavaScript中继到FSCommand或代理SWF(用于getURL),然后通过回调函数在Captivate内部监视.此回调函数使用计时器,这可能是您的问题所在.

如果您将g_intAPIType设置为0,则强制浏览器使用FSCommand,这在所有浏览器和操作系统中都不受支持.将g_intAPIType设置为1意味着您强制浏览器使用getURL,这是跨浏览器但有一些缺点(包括大量点击声).

在这两种情况下,数据都是通过内部队列脚本发送的,该脚本使用waitForResponse回调函数.

您遇到的性能问题可能是由于排队造成的,并且由于定时器附加到waitForResponse,异步通信会使问题复杂化.更改g_intAPIType可能只会对性能问题产生轻微影响,但使用getURL(g_intAPIType = 1)可能有助于提高浏览器与浏览器之间的一致性.

无论g_intAPIType设置如何,都无法阻止内部跟踪机制使用异步waitForResponse函数,因此在获取/设置数据时无法阻止Captivate使用定时器;在一段时间内,你可能会开始注意到你所描述的更长和更长的延迟,尤其是如果你打电话给LMS.

(*小例外:我被告知Captivate 4和5使用ExternalInterface如果项目是在AS3中构建的并且是为SCORM 2004发布的,但是看起来仍然使用队列和waitForResponse计时器,基本上像处理列出的异步方法一样处理ExternalInterface以上.)

标签:javascript,flash,scorm,adobe-captivate,scorm2004
来源: https://codeday.me/bug/20190515/1111469.html