从Camtasia Studio生成的课件看SCORM

参考   https://blog.csdn.net/cooldragon/article/details/19006835

https://wenku.baidu.com/view/a0bd5ca5284ac850ad02427b.html

D:\CAMTASIA STUDIO\NOI_EMACS_GDB
│  adlcp_v1p3.xsd
│  imscp_v1p1.xsd
│  imsmanifest.xml
│  NOI_emacs_gdb.html
│  NOI_emacs_gdb.js
│  NOI_emacs_gdb.mp4
│  NOI_emacs_gdb.zip                               这是打包了其他所有文件的SCORM包
│  NOI_emacs_gdb_config.xml
│  NOI_emacs_gdb_controller.swf
│  NOI_emacs_gdb_embed.css
│  NOI_emacs_gdb_First_Frame.png
│  NOI_emacs_gdb_player.html
│  playerProductInstall.swf
│  scormwrapper.js

├─scripts
│      config_xml.js
│      handlebars.js
│      jquery-1.7.1.min.js
│      jquery-ui-1.8.15.custom.min.js
│      modernizr.js
│      player-min.js
│      swfobject.js

└─skins
    └─overlay
            player-min.css
            spritesheet.png

实际生成的主要是一个mp4文件,然后SCORM课件就是打包了一堆HTML、XML、JS的zip包(包含了内容包所有文件)

imsmanifest.xml这个文件是主配置文件,顶级元素,下面包括3个节点:描述内容包整体情况、包含学习内容的结构(相同学习内容可以有多种组织形式,一定有一个默认组织形式)、定义学习包中的资源,如果是4个节点,第4个是(sub)Manifest(s),用来定义下级manifest文件

adlcp_v1p3.xsd和imscp_v1p1.xsd这两个xsd,被主配置文件imsmanifest.xml文件引用,从前缀ADL项目(SCORM模型)和IMS项目(内容打包规范)看,是定义了这两个东西里用到的数据类型之类的构件模块

在主配置文件中,存在类似如下的信息:


     
         Camtasia Video Course
         
            Untitled
            0
         

     
   

   
     
           
           
         

     
         
           

……

即默认学习内容的组织形式是标识为TOC1的那个,这个组织形式里的项目I_SCO0引用了标识为SCO0的资源。从资源部分可以知道,SCO0资源就是链接到NOI_emacs_gdb.html文件(同时依赖ALLRESOURCES资源),所以,这个html文件就是主入口了。

NOI_emacs_gdb.html文件就是一个普通的网页文件,关键部分是用

NOI_emacs_gdb_player.html文件的一些代码如下:









调用的API来自scormwrapper.js这个API包装文件,该文件定义了apiCall,findAPI,getAPI,getAPIHandle函数,基本原理是getAPIHandle调用getAPI获得句柄,在apiCall内调用LMS平台的功能前,需要先获取此句柄。而getAPI是调用findAPI从各级父窗口搜索得到句柄的。

在moodle中,查看网页源码,可以看到:


后面那个js的末尾,存在以下代码:

M.scorm_api={};

M.scorm_api.init=function(Y,def,cmiobj,cmiint,cmicommentsuser,cmicommentslms,scormdebugging,scormauto,scormid,cfgwwwroot,sesskey,scoid,attempt,viewmode,cmid,currentorg,autocommit){

window.API_1484_11=new SCORMapi1_3(def,cmiobj,cmiint,cmicommentsuser,cmicommentslms,scormdebugging,scormauto,scormid,cfgwwwroot,sesskey,scoid,attempt,viewmode,cmid,currentorg,autocommit)

}

注意到window.API_1484_11这个对象,正是包装文件scormwrapper.js中的函数findAPI中“苦苦”查找的东西:

function findAPI( win )
{
    var findAPITries = 0;
    var theAPI       = null;
    // Search each parent window until we find the API, encounter a window with no parent / the 
    // same as the current window, or have reached our MAX_PARENTS_TO_SEARCH to search threshold
    
    while ( ( win.API_1484_11 == null                  ) 
          && ( win.API         == null                  ) 
          && ( win.parent      != null                  ) 
          && ( win.parent      != win                   ) 
          && ( findAPITries    <= MAX_PARENTS_TO_SEARCH ) )
    {
        findAPITries++;
        win = win.parent;
    }
    if ( win.API_1484_11 != null )
    {
        apiVersion = 1;
        theAPI = win.API_1484_11;
    }
    else if ( win.API != null )
    {
        apiVersion = 0;
        theAPI = win.API;    
    }
    return theAPI;
}

 

 

你可能感兴趣的:(从Camtasia Studio生成的课件看SCORM)