diff --git a/publish/build_scorm_package.py b/publish/build_scorm_package.py index 0b0b99d5..ed41f43c 100644 --- a/publish/build_scorm_package.py +++ b/publish/build_scorm_package.py @@ -252,6 +252,7 @@ def build_scorm_zip(slug): html = render_template( "play.html", game=game, screens_data=payload["screens"], payload_json=json.dumps(payload), offline_mode=True, asset_url=lambda filename: "static/" + filename, + scorm_api_wrapper_url="static/js/play/offline/scorm-api.js", ) html = _relativize_absolute_urls(html, slug) html = _inline_icon_urls(html, payload["icon_data_uris"]) diff --git a/templates/play.html b/templates/play.html index b096ddc5..1b87b2b1 100644 --- a/templates/play.html +++ b/templates/play.html @@ -189,6 +189,14 @@ // triggers.js. runScreenHeldKeyTriggers(), lui, est déjà appelé depuis // showScreen() comme runScreenTimerTriggers(). bindHeldKeyTriggers(); + // Le jeu exporté (SCORM) est souvent chargé dans une iframe par le LMS, + // qui ne reçoit pas le focus clavier automatiquement — sans focus, les + // événements keydown n'atteignent jamais window et le personnage ne + // bouge/anime jamais. On force le focus au chargement et on le + // reprend au premier clic dans le jeu. + window.focus(); + document.body.tabIndex = -1; + document.body.addEventListener('click', function () { window.focus(); });