ColdFusion で独自の単純な LMS を構築しました。iframe を使用してコースを表示するだけで、ブリキ缶のステートメントを記録するページがあります。それは完璧に機能しますが、Studio '13/presenter '13 で設計されたコースがあり、出力はティンカンであり、LMS で再開機能が機能しません。
私がpresentation.htmlを使用する場合、例
https://www.domainname.com/folder/courses/example_course/presentation.html?&actor={"name":["My_Name"],"mbox":["mailto:email@email.com"],"objectType":["Agent"]}&endpoint=https://www.domainname.com/folder/courses/&course_id=5&uuid=9AE6DEA4-9C19-F477-19B9822F1E2F0722®istration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=
履歴書は機能しませんが、ティンカン ステートメントは私のサイトに適切に投稿されます。
presentation_html5.html を使用する場合、例
https://www.domainname.com/folder/courses/example_course/presentation_html5.html?&actor={"name":["My_Name"],"mbox":["mailto:email@email.com"],"objectType":["Agent"]}&endpoint=https://www.domainname.com/folder/courses/&course_id=5&uuid=9AE6DEA4-9C19-F477-19B9822F1E2F0722®istration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=
履歴書は機能しますが、ティンカンステートメントは投稿されません。
チュートリアルに従って、再開機能をセットアップしました: http://www.articulate.com/support/presenter-09/enabling-and-disabling-the-prompt-to-resume-function
いくつかの異なるサーバー上のいくつかの異なる Web サイト、およびいくつかの異なるブラウザー (IE 11、FF 34.0.5、Chrome 39.0.2171.95 m)、最新バージョンの Flash でコースを試しました。
レジューム機能が働きません。
さまざまなオプション、プロンプトなど、フラッシュ Cookie を有効または無効にしてコースを試しました。
レジューム機能が働きません。
Scorm Cloud でコースを試しました。レジューム機能が効く!FireFox で自分のコンピューターの presentation.html を開きました。レジューム機能が働きます。
問題を TinCan に絞り込みました。変更してpresentation.htmlファイルでTinCanをオフにすると
var g_bTinCan = true; to var g_bTinCan = false;
コースは通常どおり再開されます。しかし、TinCan がオフになっているため、LMS にステートメントを投稿しません。
おそらく POST state?method=GET に状態/再開データで応答する必要があることがわかりました。だから、このようなもの
1Nk30a010904050607080b0on1001811f016110171101811000 (コースにスライド 4 またはそのようなものに進むように指示します)。
データがエンコード/圧縮されていることを理解しています。実際のデータは、LMS にポストされた状態データから取得されます。各スライドには、再開ポイントが掲載されています。前のセッションからそのレジューム ポイント データを取得し、ユーザーがコースを再開し、tincan がレジューム データを要求したときにポストバックするだけでよいと思います。
しかし、どういうわけか、何を返すか、どのように返すかは関係ありません。私のコースはそこに座っているだけです。ナビゲーション バー、コース エクストラ、終了ボタン、すべてがそこにあり、コンテンツだけにロード サインがあります。クリックできるものはありません。
scorm クラウドが ColdFusion で使用する同様のヘッダーを投稿してみました。
Access-Control-Allow-Header: Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through
Access-Control-Allow-Origin: *
Access-Control-Expose-Header: ETag,Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
X-Experience-API-Version: 1.0.0
access-control-allow-methods: HEAD,GET,POST,PUT,DELETE
それらは応答とともに適切に送信されます: 1Nk30a010904050607080b0on1001811f016110171101811000
json、プレーンテキスト、配列として戻り形式を試しました。しかし、コースはロードされません。また、ブラウザを更新してすぐに停止すると、奇妙な動作が発生することもわかりました (コースは更新されません)。再開プロンプトが表示されるので、[はい/いいえ] をクリックします。そして、それは機能します。明らかにそれは正しくありません。
何か案は?私は何が欠けていますか?Articulate コースが、state?method=GET で再開ポイントを要求したときに、自分の (または任意の) LMS/LRS からの応答として何を期待しているかを探しています。
編集
@Brian: content-type は application/json です
LRS は、受信した Content-Type を返す必要があり ます。ここが難しいところです。state?method=GET は cfc 関数にリダイレクトします。../includes/LRSCFC.cfc?method=GetState&returnFormat=プレーン
これは機能です:
<cfheader name="Access-Control-Allow-Header" value="Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Access-Control-Allow-Origin" value="*">
<cfheader name="Access-Control-Expose-Header" value="Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Cache-Control" value="no-cache">
<cfheader name="Connection" value="keep-alive">
<cfheader name="Content-Type" value="application/json">
<cfheader name="X-Experience-API-Version" value="1.0.0">
<cfheader name="access-control-allow-methods" value="HEAD,GET,POST,PUT,DELETE">
<cfreturn '1s43040ji1001111a0101101111000'>
問題は、関数 returnFormat=json または serializeJSON() を使用して JSON として返すように CF に指示する場合です。返されたデータに何かを追加します。
上記のコードは以下を返します。
1s43040ji1001111a0101101111000
json を使用するように CF に指示します。
//"1s43040ji1001111a0101101111000"
これは CF の安全な機能です。
しかし、私を混乱させているのは、Scorm Cloud が戻ってくることです。
1s43040ji1001111a0101101111000
JSON のようにフォーマットされていません。Content-Type が application/json であっても、プレーン テキストのように見えます。
すべての cfheader 情報を返しますが、cfreturn を空白のままにすると、cfreturn "" は、"1s43040ji1001111a0101101111000" を返したかのようにコースがそのまま残ります。
1s43040ji1001111a0101101111000 - Should jump the user to slide 3.
返されるステータス コードは何ですか? 200OK
その他のステータスの場合、コースは再生されますが、サーバーに接続できないというメッセージが表示されます。
@アンドリュー
エラー、成功、進行中のリクエストはありますか? エラーなし。すべてが成功しているようです。進行中のリクエストはありません。