SCORM规范中关于cmi.core.session_time的计时问题

基于工作原因,看过很多课件提供商制作的符合SCORM1.2规范的课件,都直接引用了ADL官方RTE中提供的两个API封装函数库APIWrapper.js和SCOFunctions.js,对于SCOFunctions.js中提供cmi.core.session_time的计时方法,有很大的问题。

首先,声明startDate变量用来保存SCO载入时的时间点,然后在loadPage函数中对该变量进行初始化。

其次,在doBack、doContinue、doQuit中均调用了computeTime方法,该方法用系统当前时间减去startDate变量保存的载入时间来计算学员在该SCO上的学习时间。

从逻辑上来看没什么问题,用结束时间减去开始时间不就是持续时间吗。但这里有个缺陷,因为js脚本是在学员的浏览器中运行的,所以取得的所有时间值均是学员计算机的本地时间,并不是LMS服务器时间,所以学员完全可以在退出SCO前,篡改本地计算机时间而使持续时间变长,想改多少改多少。如果LMS以学员学习时长作为考核标准之一的话,学员可以利用这一缺陷轻松拿到学时。

建议自行计算学习时长并正确设置cmi.core.session_time的值,可采用如下方法:

1、修改computeTime方法,注释掉doLMSSetValue( "cmi.core.session_time", formattedTime );这一行。

2、在课件中增加自己的js代码如下所示

var session_time = 0;

function windowUnload() {
	// 设置cmi.core.session_time的值,利用convertTotalSeconds方法来格式化时间值
	doLMSSetValue("cmi.core.session_time", convertTotalSeconds(session_time));
	// do other
	// 卸载SCO
	unloadPage();
}

function timer() {
	// 检测SCO播放状态
	if (SCO.getStatus() == "PLAYING")
		session_time++;
}

window.onunload = windowUnload;
window.setInterval("timer()", 1000);

3、以上代码利用定时器每秒检测一次SCO的播放状态,在SCO播放时累计秒数,既能防止学员篡改本地计算机时间来影响计时,也可以在SCO暂停时不记录时长,避免学员挂机攒时长。

当然,以上代码仅针对功利性学习行为而提供的带有典型中国特色的在线课程防挂机机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值