<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Debugger lock</title>
  </head>
  <body>
    <script>
      let workerUrl =
        "data:application/javascript;base64," +
        btoa(`
self.addEventListener('message', (e) => {
  if(e.data==='hello'){
    self.postMessage('hello');
  }
  debugger;
  self.postMessage('');
});
`);
      function checkIfDebuggerEnabled() {
        return new Promise((resolve) => {
          let fulfilled = false;
          let worker = new Worker(workerUrl);
          worker.onmessage = (e) => {
            let data = e.data;
            if (data === "hello") {
              setTimeout(() => {
                if (!fulfilled) {
                  resolve(true);
                  worker.terminate();
                }
              }, 1);
            } else {
              fulfilled = true;
              resolve(false);
              worker.terminate();
            }
          };
          worker.postMessage("hello");
        });
      }

      const wait = (milliseconds) => {
        return new Promise((resolve) => setTimeout(resolve, milliseconds));
      };

      const loop = async () => {
        await checkIfDebuggerEnabled().then((result) => {
          if (result) {
            const f = new Function("", "debugger");
            f();
          }
        });
        wait(1000).then(loop());
      };

      loop()
    </script>
  </body>
</html>
