簡體   English   中英

TinCan / xAPI-恢復提示不起作用

[英]TinCan/xAPI - Resume Prompt Not Working

我在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&registration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=

簡歷不起作用,但tincan聲明正確發布到了我的網站。

如果我使用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&registration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=

履歷表確實有效,但tincan陳述不發布。

我已按照該教程進行操作並設置了簡歷功能: http : //www.articulate.com/support/presenter-09/enabling-and-disabling-the-prompt-to-resume-function

我已經在最新版本的Flash上​​,在不同服務器上的多個不同網站上,以及在不同瀏覽器(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狀態?method = GET。 所以像這樣

1Nk30a010904050607080b0on1001811f016110171101811000(告訴您要滑動第4張幻燈片或類似內容的過程)。

我了解數據已編碼/壓縮。 數據實際上來自發布到LMS的狀態數據。 每張幻燈片都會發布一個簡歷點。 我猜想我只需要從上一個會話中獲取該恢復點數據,然后在用戶恢復課程並且tincan要求恢復數據時發回。

但是由於某種原因,無論我返回什么以及如何返回它。 我的課程只是坐在那里。 一切都在那里,導航欄,課程附加功能,退出按鈕,僅內容具有加載標記。 沒有什么是可點擊的。

我試過發回類似的標頭,這些標頭是scorm Cloud在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,純文本,數組。 但是課程沒有加載。 如果刷新然后立即停止瀏覽器,我也會發現奇怪的行為(該過程永遠不會刷新)。 它將顯示簡歷提示,然后單擊“是/否”。 而且有效。 顯然那是不對的。

有任何想法嗎? 我想念什么? 我正在尋找要求我的(或任何)LMS / LRS在要求狀態恢復點時響應的銜接課程期望的方法?method = GET。

編輯

@Brian:內容類型為application / json

LRS應該在收到內容類型時返回它。這是棘手的地方。 state?method = GET重定向到cfc函數。 ../includes/LRSCFC.cfc?method=GetState&returnFormat=plain

這是功能:

<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()告訴CF以json的形式返回。 它將內容添加到返回的數據中。

上面的代碼將返回:

1s43040ji1001111a0101101111000

告訴CF使用json:

//"1s43040ji1001111a0101101111000"

這是CF的安全功能。

但是令我困惑的是Scorm Cloud剛剛回歸

1s43040ji1001111a0101101111000

它的格式不像JSON。 即使Content-Type是application / json,它似乎還是純文本。

如果我返回所有cfheader信息,但將cfreturn留空為cfreturn“”,則課程就坐在那里,就好像我返回了“ 1s43040ji1001111a0101101111000”

1s43040ji1001111a0101101111000 - Should jump the user to slide 3.

您要返回什么狀態碼? 200 OK

任何其他狀態,該課程都會播放,但會抱怨它無法連接到服務器。

@安德魯

是否有任何錯誤,成功,正在進行的請求? 沒有錯誤。 似乎一切都成功了。 沒有任何要求。

我發現了我的問題。 我在標題中缺少Content-Length Content-Length只是響應數據的長度。 所以我添加了這個:

<cfheader name="Content-Length" value="#len('1s43040ji1001111a0101101111000')#">

對於我當前的代碼,像這樣:

<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">
<cfheader name="Content-Length" value="#len('1s43040ji1001111a0101101111000')#">
<cfreturn '1s43040ji1001111a0101101111000'>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM