我正在开发符合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问正确的问题...帮助:)
由于
答案 0 :(得分:7)
发布SCORM时,Captivate不使用同步通信方法。*根据浏览器的不同,Captivate使用FSCommand或旧式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。)
答案 1 :(得分:0)
一些选项:
你可以改变你的问题。而不是每帧1个将所有问题放在1帧上。
否则,您需要在SCORM Player JavaScript中执行一些JavaScript魔术。我将首先使用JSMin等工具来最小化JS代码。
然后尝试缓存JS文件,使它们只加载一次。我怀疑每个帧都会反复调用这些文件。
答案 2 :(得分:0)
“有一种方法可以实现这种同步吗?我的意思是,迫使闪存等待某种方式?”
显然,问题在于: “Captivate是唯一一个异步调用SCORM JavaScript函数的SCO。Firefox是唯一不强制SCO和支持JavaScript之间同步通信的浏览器。当在Firefox上运行的Captivate SCO向其中一个JS提交状态更新时在提交下一个状态更新之前,Captivate不等待成功或失败响应。由于Captivate在通信中非常冗长而且JavaScript不是多线程的,因此测验状态提交可以叠加并相互覆盖。这可能导致丢失数据 - 尤其适用于较长时间的测验。[...]
如果您想查看任何其他LMS的异步问题,请使用Firefox进行长时间的Captivate测验,并快速回答 very 的问题。接近尾声的一些问题将被删除..“(interzoic.com论坛)
也许是solution: “当我强制将g_intAPIType强制为0时,缓慢的问题就解决了 .htm文件),因此它强制Captivate进行通信,就像进入IE一样。“
答案 3 :(得分:0)
在着迷中,在发布scorm时,您会看到选项“最后发送跟踪数据”, 使用此选项,它将解决您的问题。