由于Moodle中的自动注销而在flash过程中出现问题

时间:2015-02-06 12:23:49

标签: flash moodle

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

1 个答案:

答案 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中的超时。这可能会让您了解更新所有内容的恶化。