Dans un cours SCORM classique, la connexion API est conservée dans la trame parente alors que le contenu du cours est chargé dans une trame enfant (iframe). Le contenu de l'iframe peut être chargé et déchargé à volonté; le contenu de l'iframe aura tendance à contenir les appels SCORM importants que vous voudriez faire pendant la durée de vie d'un cours, comme le score et l'état d'achèvement, mais ils le feront en relayant l'information au cadre parent, qui possède le communication avec le LMS.
est ici par exemple rapide en utilisant SCORM 1.2 (non testé dans un LMS, barebones, devrait être étoffée)
index.html (cadre parent)
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Course Title</title>
<style>
/* Use CSS to make the iframe fill the parent frame,
giving impression no frames are being used */
body { padding: 0; margin: 0; overflow: hidden; }
iframe { position: absolute; top: 0; right: 0; bottom: 0; left: 0; overflow: auto; }
</style>
</head>
<body>
<iframe src="" id="course-content" frameborder="0"></iframe>
<script>
//Place initialization routine here.
//Connect to SCORM API, run API.LMSInitialize()
var SCORM_API = window.API; //shortcut reference
function setScore(score){
SCORM_API.LMSSetValue("cmi.core.score.raw", score);
}
function setStatus(status){
SCORM_API.LMSSetValue("cmi.core.lesson_status", status);
}
function endCourse(){
SCORM_API.LMSCommit();//Save, just in case
SCORM_API.LMSFinish();//Close API connection
}
SCORM_API.LMSInitialize();
//Load child frame once SCORM_API is ready
document.getElementById("course-content").setAttribute("src", "content.html");
</script>
</body>
</html>
content.html (cadre enfant)
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Course Content</title>
</head>
<body>
<p>This is the content of the course. Add scripts to make it do something.</p>
<script>
//Place course functionality here, such as setting a bookmark or score.
//'parent' is the parent frame.
//This is a very arbitrary example of what you can do when a course loads
parent.setScore("100");
parent.setStatus("completed");
parent.endCourse();
</script>
</body>
</html>
typiquement, vous souhaitez utiliser un emballage SCORM pour gérer une partie de la soulever des charges lourdes, et que vous souhaitez utiliser un abstraction layer pour améliorer le code maintenabilité et CE ntralisez vos commandes SCORM dans le cadre parent. La fonction endCourse()
est un exemple très simple d'une couche d'abstraction. Au lieu d'appeler l'API directement dans le cadre enfant, vous appelez une fonction.