我是 SCORM 新手,面临 SCORM 初始化问题。
我遇到的错误是内容无法找到 SCORM API 适配器。 我想做的是,我正在创建一个 iframe
<iframe id="demo_page_iframes" src="index.html" width="100%" height="100%"></iframe>
这是我的父 iframe,我在其中调用位于 scorm 包中的 index.html 文件。
它正确加载了我的index.html,但在网络选项卡中,我看不到任何包含或加载的manifest.xml,并且显示一个弹出窗口,上面提到的错误。
我正在使用包装器 pipwerks https://github.com/pipwerks/scorm-api-wrapper 并包含其 SCORM_API_wrapper.js。
查看 SCORM_API_Wrapper.js 后,我看到有评论说要定义版本和 API 对象,我保持原样,因为我假设包装器会自动从 index.html 获取数据并将其添加到此处。如果我错了请纠正我或者我需要在这里进行任何更改。
var pipwerks = {}; //pipwerks 'namespace' helps ensure no conflicts with possible other "SCORM" variables
pipwerks.UTILS = {}; //For holding UTILS functions
pipwerks.debug = { isActive: true }; //Enable (true) or disable (false) for debug mode
pipwerks.SCORM = { //Define the SCORM object
version: null, //Store SCORM version.
handleCompletionStatus: true, //Whether or not the wrapper should automatically handle the initial completion status
handleExitMode: true, //Whether or not the wrapper should automatically handle the exit mode
API: {
handle: null,
isFound: false
}, //Create API child object
connection: { isActive: false }, //Create connection child object
data: {
completionStatus: null,
exitStatus: null
}, //Create data child object
debug: {} // debug child object
};
此外,我面临的问题只是当我尝试开始上课时。我认为问题是要么我没有加载manifest.xml,我不知道如何将其包含在pipwerks包装文件中(或者它已经这样做了),要么我需要在pipwerks包装js文件中定义配置。 因为我在带有包装器 ngx 包装器的 Angular 上使用了 scorm 包,并且它工作正常并正确加载了具有我的规格的 manifest.xml 文件。但是,当我在 PHP 端开始课程并加载我的 iframe 并使用 index.html 将我的内容添加到我的父 iframe 中时,它在初始化时失败。
添加了 pipwerks
wrapper.js
并期望 manifest.xml
自动加载,配置也基于 index.html
和清单
编辑:阅读 Scorm 文档后,我理解了这个问题。让我分解一下步骤。
1:在初始化之前,您当前的窗口或父窗口或打开窗口(取决于它如何显示内容)应该具有基于 scorm 版本的 API 对象。
2:标准 scorm 包包含一个 XML 文件(两个版本)。
3:您需要解析 XML,它应该有两个重要的内容。
a:SCORM 版本:我相信应该在 schemaversion 标签中。
b:索引文件或需要加载的第一个文件的路径。 这应该位于 resources->resource->href 标签中。
4:一旦你得到了这些东西,现在你可以根据你需要的版本来准备你的API对象了。
5:如果版本是1.2,scorm将寻找API对象,在2004年的情况下,它是API_1484_11。
6:该对象应该具有基于所需版本的函数实现,例如Initialize(2004) LMSInitialize(1.2)、SetValue(2004) LMSSetValue(1.2) 等等,类似地需要什么 CMI 模型。 您可以从这里检查:https://scorm.com/scorm-explained/technical-scorm/run-time/run-time-reference/#section-2
7:将此对象分配给当前窗口或父窗口。
最后,您需要加载我们在 3b 中获得的 HTML,并将其加载到新窗口或 iframe 中。
HTML 通常有一个 onLoad 函数,它会调用初始化函数,然后查找您定义的 API 对象。找到后,初始化成功。
现在,当您浏览内容时,LMS 可以通过您实现的函数(SetValue、GetValue)进行通信,并且您可以添加跟踪或任何您想要的内容。
注意:Pipwerks 包装器是这两个版本的实现,它查找这些对象并启动通信。您需要自己实现这些功能并将对象分配给窗口(我认为这已经完成,因此卡住了)。