我已经在ColdFusion中构建了自己的简单LMS。它只是使用iframe来显示课程,并且有一页记录了tin can语句。它工作完美,但我有一个课程设计在工作室‘13/演讲者'13,输出是tincan,简历功能不工作在我的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=简历不起作用,但是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®istration=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
我在几个不同的服务器上,在几个不同的浏览器(IE 11,FF 34.0.5,Chrome 39.0.2171.95m)上尝试了这个课程,这是Flash的最新版本。
简历功能不起作用。
我已经尝试了所有不同的选项,提示等课程,闪存饼干启用和禁用。
简历功能不起作用。
我在Scorm上试过这个课程。简历功能有效!我已经在我的电脑上用presentation.html打开了FireFox。简历功能正常工作。
我已经把这个问题缩小到TinCan了。如果我通过更改TinCan文件关闭presentation.html文件
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、纯文本、数组。但这条路没有负荷。我还发现了奇怪的行为,如果我刷新,然后立即停止浏览器(课程永远不会刷新)。它将打开简历提示,然后我可以单击“是/否”。而且它是有效的。显然这不对。
有什么想法吗?我遗漏了什么?我正在寻找一门清晰的课程,当它要求state?method=GET上的简历点时,它将作为我(或任何) LMS/LRS的回应。
编辑
@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'>问题是,如果告诉CF使用函数returnFormat=json或serializeJSON()作为json返回。它向返回的数据添加内容。
上述代码将返回:
1s43040ji1001111a0101101111000告诉CF使用json:
//"1s43040ji1001111a0101101111000"这是CF的一个安全特性。
但让我困惑的是Scorm刚刚回来
1s43040ji1001111a0101101111000它的格式不像JSON。尽管内容类型是application/json,但它似乎是纯文本。
如果我返回所有cfheader信息,但留下course空白course“,则课程就像我返回的”1s43040ji1001111a010110111000“一样。”
1s43040ji1001111a0101101111000 - Should jump the user to slide 3.您返回的是什么状态代码? 200确定
任何其他状态,该课程将播放,但会抱怨它无法连接到服务器。
@Andrew
是否有任何错误、成功和要求正在进行中?没有错误。似乎一切都很成功。没有进行中的请求。
发布于 2015-01-28 19:13:11
我解决了我的问题。我在标题中缺少了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'>https://stackoverflow.com/questions/28075312
复制相似问题