Adobe Captivate SCORM在Moodle中JavaScript代码失效问题求助
解决Adobe Captivate SCORM项目在Moodle中勾选标记不显示的问题
核心问题排查与解决方案:
元素定位与jQuery冲突问题
Moodle的SCORM容器会将内容嵌套在iframe中,且可能存在jQuery版本冲突,导致选择器无法定位目标元素。建议改用原生JS操作DOM,同时增加错误日志便于排查:var currSlide = window.cpAPIInterface.getCurrentSlideIndex(); var tickElement = document.getElementById("icon_tick_slide" + currSlide + "c"); if (tickElement) { tickElement.style.visibility = "visible"; // 若原本用display属性隐藏,替换为:tickElement.style.display = "inline-block"; } else { console.error("未找到幻灯片" + currSlide + "对应的勾选元素"); }先通过Moodle开发者工具(F12)确认勾选元素的实际ID是否与代码中的
icon_tick_slideXc一致,避免Captivate导出时自动修改ID。iframe上下文隔离处理
若Captivate内容在子iframe中,直接调用window会指向父页面,需切换到iframe内部上下文:// 根据实际src特征定位Captivate所在iframe var cpIframe = document.querySelector('iframe[src*="html5"]'); if (cpIframe) { var cpWindow = cpIframe.contentWindow; var currSlide = cpWindow.cpAPIInterface.getCurrentSlideIndex(); var tickElement = cpWindow.document.getElementById("icon_tick_slide" + currSlide + "c"); if (tickElement) tickElement.style.visibility = "visible"; }Captivate API初始化时机校正
Moodle加载SCORM的速度较慢,需确保API完全初始化后再执行代码:function showTickMark() { var currSlide = window.cpAPIInterface.getCurrentSlideIndex(); var tickElement = document.getElementById("icon_tick_slide" + currSlide + "c"); if (tickElement) tickElement.style.visibility = "visible"; } // 绑定下一页按钮事件(替换为你的按钮实际ID) function bindButtonEvent() { document.getElementById("next_button").addEventListener("click", showTickMark); } // 监听API就绪事件 if (window.cpAPIInterface) { bindButtonEvent(); } else { window.addEventListener("cpAPIInterfaceReady", bindButtonEvent); }SCORM导出设置验证
- 导出时务必勾选「允许JavaScript交互」选项,且SCORM版本(1.2/2004)与Moodle支持版本匹配。
- 选择「仅HTML5」格式导出,彻底规避Flash兼容性问题(Moodle已停止支持Flash)。
内容的提问来源于stack exchange,提问作者Markol
相关产品推荐
相关产品推荐

