5

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

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

经过大量的google搜索,以及调试和跟踪,最终我发现了两个主要问题:

1) Captivate - SCORM API 通信是异步的(与 flash - javascript 通信相同)。所以,当用户快速看到内容时,函数调用会越来越多,最后,可能用户正在回答第 15 题,而内容正在发送第 4 题的信息。我无法更改 Flash 或 JS-Flash 界面,因为这是 Captivate 提供的。

有办法让这个同步??我的意思是,强制闪光灯等待某种方式?

2) 函数每次调用耗时较长,例如 setValue 第一次耗时 7 毫秒,最后一次调用耗时 200 毫秒。

为了理解这个问题,这里有一点背景知识: Captivate contents(所有内容,但更令人着迷)多次调用特定函数,SetValue 函数,SCORM API 函数之一。该函数有两个参数(fieldName, value),第一个是要设置的字段的名称,第二个是新值。在我的实现中,此函数首先使用正则表达式验证值,然后在对象中设置值。

好的,我可以添加更多信息,但我不知道真正重要的是什么....也许那个人问对了问题...帮助:)

谢谢

4

4 回答 4

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 进行大量调用。

(* 小例外:如果项目是在 AS3 中构建并为 SCORM 2004 发布的,我已被告知 Captivate 4 和 5 使用 ExternalInterface,但似乎waitForResponse仍在使用队列和计时器,基本上将 ExternalInterface 视为上面列出的异步方法.)

于 2010-08-18T04:14:07.090 回答
0

一些选项:

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

否则,您将需要在您的 SCORM Player JavaScript 中做一些 JavaScript 魔术。我将从使用JSMin 之类的工具最小化 JS 代码开始。

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

于 2010-03-03T14:34:46.740 回答
0

令人着迷的是,在发布 scorm 时,您会看到“最后发送跟踪数据”选项,使用此选项将解决您的问题。

于 2014-06-18T07:11:13.270 回答
0

"There is a way to make this sync?? I mean, to force the flash wait some way?"

Apparently, the problem is this one : "Captivate is the only SCO that calls SCORM JavaScript functions asynchronously. Firefox is the only browser that does not force synchronous communications between the SCO and the supporting JavaScript. When a Captivate SCO, running on Firefox, submits a status update to one of the JS functions, Captivate does not wait for a success or fail response before submitting the next status update. Since Captivate is quite verbose in its communications and JavaScript is not multithreaded, quiz status submissions can stack up and overwrite each other. This can cause a loss of data - especially for longer quizzes. [...]

If you'd like to see the asynchronous problem with any other LMS, take a long Captivate quiz using Firefox and answer the questions very quickly. Some of the questions near the end will get dropped.. " (interzoic.com forum)

And maybe a solution : "The slow issue is resolved when I force the g_intAPIType to 0 (into the .htm file), so it force Captivate to communicate as if it was into IE."

于 2010-07-13T13:17:44.123 回答