由于Moodle中的自动注销,flash课程中出现问题



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

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

如果内容是使用第三方工具构建的,或者是自定义的,您可能需要研究JavaScript文件,看看是否可以确定API查找的确切位置。然后,您必须定期检查API是否存在,这样您就可以发现运行时的丢失。

但是,如果找不到代码,可以使用自己的代码来确定是否存在Runtimeneneneba 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超时。这可能会让你避开更新所有内容的麻烦。

相关内容

最新更新