5

SCORM 準拠の LMS を開発していますが、Captivate で生成されたコンテンツに問題があります。

基本的に、動作は次のとおりです。たとえば、15 枚のスライドと各スライドに 1 つの質問がある SCO (captivate によって生成されたコンテンツ) がすぐに表示される場合、私の lms は 15 の質問すべてを追跡しておらず、最初の 3 つまたは 4 つだけを追跡しています。最後に長い時間、またはコンテンツをゆっくりと取ると、問題なく動作します。

何度も Google で検索し、デバッグとトレースを行った結果、最終的に 2 つの主な問題が見つかりました。

1) Captivate - SCORM API 通信は非同期です (flash - javascript 通信と同じです)。そのため、ユーザーがコンテンツをすばやく見ると、関数呼び出しはますます処理されなくなり、最終的にはユーザーが質問 15 に回答し、コンテンツが質問 4 の情報を送信している可能性があります。Flash または JS-Flash インターフェイスは Captivate によって提供されているため、変更できません。

この同期を行う方法はありますか?? つまり、フラッシュを何らかの方法で強制的に待機させるということですか?

2) 関数が呼び出されるたびに時間がかかっています。たとえば、setValue は最初に 7 ミリ秒かかり、最後に呼び出されたときに 200 ミリ秒かかります。

この問題を理解するために、少し背景を説明します。Captivate コンテンツ (実際にはすべてのコンテンツですが、より Captivate を含む) は、SCORM API 関数の 1 つである特定の関数 SetValue 関数を何度も呼び出します。この関数は 2 つのパラメーター (fieldName、value) を受け取ります。最初のパラメーターは設定するフィールドの名前で、2 番目のパラメーターは新しい値です。私の実装では、この関数はまず正規表現を使用して値を検証し、次にオブジェクトに値を設定します。

わかりました、もっと多くの情報を追加できますが、本当に重要なことはわかりません。コードを見ずに修正することを望んでいませんが、アイデアが不足しており、新しい意見、アイデア、方向性が必要です.... 誰かが正しい質問をするかもしれません...助けて:)

ありがとう

4

4 に答える 4

7

SCORM 用にパブリッシュする場合、Captivate は同期通信方法を使用しません。* ブラウザーに応じて、Captivate は FSCommand または従来のgetURL方法のいずれかを使用して HTML ファイルと通信します。次に、HTML ファイルは JavaScript を使用して、SCORM API 経由でデータを LMS に中継します。

応答 (存在する場合) は、JavaScript から FSCommand またはプロキシ SWF (の場合) に中継され、getURLその後、コールバック関数を介して Captivate で内部的に監視されます。このコールバック関数はタイマーを使用していますが、おそらくそこに問題があります。

0 に設定g_intAPITypeすると、ブラウザーに FSCommand の使用が強制されますが、これはすべてのブラウザーとオペレーティング システムでサポートされているわけではありません。1 に設定g_intAPITypeすると、ブラウザで を使用するように強制されますgetURL。これはクロスブラウザですが、いくつかの欠点があります (多数のクリック音を含む)。

どちらの場合も、データはコールバック関数を使用する内部キュー スクリプトを介して送信されwaitForResponseます。

発生しているパフォーマンスの問題は、キューイングが原因である可能性が高く、 に接続されているタイマーが原因で、非同期通信が問題を悪化させていますwaitForResponse。( ) を使用すると、ブラウザ間の一貫性が向上する可能性がありますが、変更g_intAPITypeによるパフォーマンスの問題への影響はおそらくわずかです。getURLg_intAPIType=1

設定に関係なくg_intAPIType、内部追跡メカニズムが非同期関数を使用するのを防ぐことはできないため、waitForResponseデータの取得/設定時に Captivate がタイマーを使用するのを停止する方法はありません。しばらくすると、特にあなたが説明したような遅延がますます長くなることに気づき始めるでしょう。LMS に多くの呼び出しを行っている場合。

(* 小さな例外: プロジェクトが AS3 でビルドされ、SCORM 2004 用に公開されている場合、Captivate 4 および 5 は ExternalInterface を使用することを知らされましたが、キューとwaitForResponseタイマーがまだ使用されているようで、基本的に上記の非同期メソッドのように ExternalInterface を扱っています。 .)

于 2010-08-18T04:14:07.090 に答える
0

「これを同期させる方法はありますか??つまり、フラッシュを強制的に待機させる方法はありますか?」

どうやら、問題は次のとおりです。「Captivate は、SCORM JavaScript 関数を非同期的に呼び出す唯一の SCO です。Firefox は、SCO とサポートする JavaScript 間の同期通信を強制しない唯一のブラウザです。Firefox で実行されている Captivate SCO が送信するとき、 a status update to one of the JS functions, Captivate does not wait for a success or fail response before submit the next status update. Captivate の通信は非常に冗長で、JavaScript はマルチスレッド化されていないため、クイズ ステータスの送信が積み重なってそれぞれを上書きする可能性があります。これにより、特に長いクイズの場合、データが失われる可能性があります [...]

他の LMS での非同期の問題を確認したい場合は、Firefox を使用して長い Captivate クイズに答えてください。終わり近くの質問のいくつかは削除されます.. " (interzoic.com フォーラム)

そしておそらく解決策: 「g_intAPIType を (.htm ファイルに) 強制的に 0 にすると、遅い問題は解決されるため、Captivate は IE にあるかのように通信するようになります。」

于 2010-07-13T13:17:44.123 に答える
0

いくつかのオプション:

質問のやり方を変えることができます。フレームごとに 1 つではなく、すべての質問を 1 つのフレームに配置します。

それ以外の場合は、SCORM Player JavaScript で JavaScript マジックを実行する必要があります。JSMinのようなツールを使用して JS コードを最小化することから始めます。

次に、JS ファイルをキャッシュして、一度だけロードされるようにします。ファイルが各フレームで何度も呼び出されていると思われます。

于 2010-03-03T14:34:46.740 に答える
0

Captivate では、scorm の公開中に「最後に追跡データを送信する」オプションが表示されます。このオプションを使用すると、問題が解決します。

于 2014-06-18T07:11:13.270 に答える