-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinjection.js
More file actions
50 lines (43 loc) · 1.47 KB
/
injection.js
File metadata and controls
50 lines (43 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(() => {
// 1. Expose internal SCORM functions if not already global
if (typeof window.set_value !== 'function') {
try {
const SCORM = window
window.set_value = function(key, value) {
if (!SCORM) return console.error('SCORM API not found');
const result = SCORM.LMSSetValue(key + '', value + '');
if (!SCORM.LMSCommit("")) {
console.warn('Commit failed');
}
console.log('set_value:', key, value, result);
};
window.get_value = function(key) {
if (!SCORM) return '';
const value = SCORM.LMSGetValue(key + '');
console.log('get_value:', key, value);
return value + '';
};
} catch (e) {
console.error('Failed to expose SCORM functions:', e);
return;
}
}
// 2. Manually set 4 key SCORM values to spoof completion
const suspend = get_value('cmi.suspend_data') || '{}';
let suspend_obj;
try {
suspend_obj = JSON.parse(suspend);
} catch (e) {
console.warn('Could not parse suspend_data:', e);
suspend_obj = {};
}
if (!suspend_obj.course_work) {
console.warn('Missing course_work in suspend_data, injecting placeholder.');
suspend_obj.course_work = 'FAKE_COURSE_ID';
}
set_value('cmi.suspend_data', JSON.stringify(suspend_obj));
set_value('cmi.core.score.raw', 100);
set_value('cmi.core.session_time', '0001:00:00');
set_value('cmi.core.lesson_status', 'passed');
console.log('🎉 All SCORM values injected.');
})();