Skip to content

Instantly share code, notes, and snippets.

@deadflowers
Last active May 10, 2026 01:19
Show Gist options
  • Select an option

  • Save deadflowers/69fee6cf9a558f7cf6c0852b6435ed2e to your computer and use it in GitHub Desktop.

Select an option

Save deadflowers/69fee6cf9a558f7cf6c0852b6435ed2e to your computer and use it in GitHub Desktop.
Hacking the California Sex Harassment Training Cert

Storyline Navigation Bypass A surgical utility for Articulate Storyline 360 environments that overrides state-machine restrictions. It programmatically synchronizes the internal media manager, clears session-specific lock variables, and dispatches trusted events to force slide transitions.

Screenshot From 2026-05-09 18-15-27

Note this will not answer quiz questions but rather manually skip through non interactive slides.

Implementation Open the browser Console (F12).

Ensure the JavaScript context is set to the frame containing the course (e.g., story.html).

Paste the payload into browser console or execute in address bar or saved as bookmarklet on favorites bar.

The Payload

javascript:(function(s){setInterval(function(){try{var p=GetPlayer(),d=window.DS;if(p){p.SetVar("Configuration.NavigationMode","Free");var v=p.state?.variables?.data||p.state?.data||p;for(var k in v){if(/complete|visited|viewed/i.test(k))p.SetVar(k,true)}}if(d&&d.mediaManager){d.mediaManager.allMedia().forEach(m=>{if(m.setElapsed&&m.getDuration)m.setElapsed(m.getDuration())})}var n=document.getElementById("next")||document.querySelector('[aria-label*="Next"]');if(n){n.classList.remove("cs-disabled","disabled","cs-restricted");n.removeAttribute("disabled");n.removeAttribute("aria-disabled");n.dispatchEvent(new MouseEvent("click",{bubbles:true,cancelable:true,view:window,buttons:1}));if(d&&d.app&&d.app.onNextAction)d.app.onNextAction()}}catch(e){}},s*1000)})(30);
(function autoPilot(seconds) {
console.log(`%c--- Auto-Pilot Engaged: ${seconds}s intervals ---`, "color: #00ffff; font-weight: bold;");
const runCycle = () => {
try {
if (typeof GetPlayer === 'function') {
const p = GetPlayer();
p.SetVar("Configuration.NavigationMode", "Free");
const vars = p.state?.variables?.data || {};
for (let k in vars) { if (/complete|visited/i.test(k)) p.SetVar(k, true); }
}
if (window.DS && DS.mediaManager) {
DS.mediaManager.allMedia().forEach(m => {
if (m.setElapsed && m.getDuration) m.setElapsed(m.getDuration());
});
}
const nextBtn = document.getElementById('next') ||
document.querySelector('[aria-label*="Next"]');
if (nextBtn) {
nextBtn.classList.remove('cs-disabled', 'disabled', 'cs-restricted');
nextBtn.removeAttribute('disabled');
nextBtn.removeAttribute('aria-disabled');
console.log("%cAction: Attempting Click...", "color: #ffff00;");
const clickEvt = new MouseEvent('click', {
bubbles: true, cancelable: true, view: window, buttons: 1
});
nextBtn.dispatchEvent(clickEvt);
if (window.DS && DS.app && DS.app.onNextAction) {
DS.app.onNextAction();
}
}
} catch (e) {
console.log("Cycle error (likely frame issue):", e.message);
}
};
setInterval(runCycle, seconds * 1000);
runCycle();
})(30);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment