@cyclophora Did you know that settimeout can take a string argument?
You can add an invisible button to the dom with an onclick attribute that's a string of code and then call .click() on it.
Create an iframe with a javascript:... URI.
It's a bit of a lost cause.
Also, I've written bytecode interpreters in JavaScript that can run arbitrary code and bypass CSP restrictions.