由于 Moodle 中的自动注销导致 Flash 课程出现问题

Issue in flash course due to auto logout in Moodle

我的 Moodle 版本是 2.3.1 我正在上传具有 2 个不同 windows 的 Flash 课程 1 是启动器页面,我从该页面启动另一个 window 中的实际课程,其中包含用于学习目的的 Flash 内容。最近我发现了一个问题,由于 Moodle LMS 的自动注销功能,如下所示。当我从启动器 window 启动课程时它工作正常,当 Moodle 在特定时间后自动注销时 SCORM 跟踪停止并且 Moodle 上没有为该用户更新数据但是 API 通信继续没有错误代码和因此我的主要课程 window 继续课程,没有任何问题,也没有在 Moodle 上进行任何跟踪。这会导致该用户能够完成课程,但在 LMS 端找不到跟踪详细信息。那么如何在课程中识别 Moodle 执行了自动注销并且没有数据发送到 LMS,这样我至少可以通知用户停止学习这门课程,因为它与 LMS 失去了联系。

大多数情况下,SCO 会查找 SCORM 运行时一次,然后继续与它找到的 API 引用进行通信。通常有一个 "findAPI" 算法,它在 windows 之间查看 DOM,对于此运行时 API 实际上只是在这种情况下调用 "API"。运行时可能隐藏在父 window、框架等中...

如果内容是使用第 3 方工具构建的,或者如果是自定义的,您可能需要研究 JavaScript 文件以查看是否可以准确确定此 API 查找发生的位置.然后,您必须定期检查 API 是否存在,以便您可以捕获运行时的丢失。

如果找不到代码,您可以使用自己的代码来确定运行时 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 中调整管理► 服务器► 会话处理► 超时。这可能会让您避免更新所有内容的烦恼。