我的Moodle版本是2.3.1 我正在上传有2个不同窗口的flash课程1是启动器页面,我在另一个窗口中启动实际课程,其中包含用于学习目的的flash内容。最近我发现由于Moodle LMS的自动注销功能导致的问题如下。当我从启动器窗口启动课程时它工作正常,当Moodle在特定时间后自动注销SCORM跟踪停止并且没有为该用户更新Moodle数据但API通信继续没有错误代码因此我的主课程窗口继续课程没有任何问题,没有任何跟踪Moodle。这导致用户能够完成课程但没有在LMS结束时找到跟踪详细信息。那么如何识别Moodle已经执行了自动注销并且没有数据发送到LMS,这样我至少可以告知用户因为失去与LMS的通信而停止参加该课程。
答案 0 :(得分:0)
大多数时候SCO查找SCORM Runtime一次,然后继续与它找到的API引用进行通信。通常有一个" findAPI"查看DOM的算法,这个运行时API的窗口之间实际上只调用了#34; API"在这种情况下。运行时可能隐藏在父窗口,框架等中......
如果内容是使用第三方工具构建的,或者是自定义内容,您可能需要研究JavaScript文件,以确定是否可以确定此API查找的确切位置。然后,您必须定期检查API是否存在,以便您可以捕获运行时的丢失。
但是,如果找不到代码,则可以使用自己的代码确定是否存在Runtime API。我还在移动设备上看到了如果LMS在新选项卡中启动的情况,并且内容足够大,则内存不足,其他选项卡也会休眠。这也可能导致数据丢失。
你可以使用SCORM 1.2部分,因为这是Moodle -
var API = {},
win;
// FindAPI Method
function findAPI(win) {
var attempts = 0, limit = 500;
while ((!win.API && !win.API_1484_11) && (win.parent) && (win.parent !== win) && (attempts <= limit)) {
attempts += 1;
win = win.parent;
}
if (win.API_1484_11) {//SCORM 2004-specific API.
API.version = "2004";
//Set version
API.path = win.API_1484_11;
} else if (win.API) {//SCORM 1.2-specific API
API.version = "1.2";
//Set version
API.path = win.API;
} else {
return false;
}
return true;
}
/* returns {boolean} API found true, false if not*/
function checkAPI() {
try {
win = window.parent;
if (win && win !== window) {
findAPI(window.parent);
}
} catch (e) {/* Cross Domain issue */
// send to console?
}
if (!API.path) {
try {
win = window.top.opener;
findAPI(win);
} catch (ee) {/* Cross domain issue */
// Send to console?
}
}
if (API.path) {
API.connection = true;
return true;
}
// Could not locate the API - throw error
return false;
}
我想到你可能只需调整管理►服务器►会话处理►Moodle中的超时。这可能会让您了解更新所有内容的恶化。