Captivate - LMS - SCORM通信问题

Jav*_*ier 5 javascript flash adobe-captivate scorm scorm2004

我正在开发符合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问正确的问题......帮助:)

谢谢

pip*_*rks 7

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

响应(如果有的话)从JavaScript中继到FSCommand或代理SWF(for 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 .)

  • 更新感兴趣的人:Captivate 6有一个完全重写的SCORM代码库,由Rustici Software(scorm.com)提供.Captivate 6不应出现此问题中描述的任何问题. (3认同)

Tod*_*ses 0

一些选项:

你可以改变做题的方式。将所有问题放在 1 帧上,而不是每帧 1 个。

否则,您将需要在 SCORM 播放器 JavaScript 中执行一些 JavaScript 魔法。我首先会使用JSMin这样的工具最小化 JS 代码。

然后尝试缓存 JS 文件,以便它们只加载一次。我怀疑每一帧都会一遍又一遍地调用这些文件。