<html>
<body>
<script>
if (location.hash) {
  window.opener.postMessage('foo', '*');
} else {
  // `setImmediate` schedules a function to be run on the next UV tick, which
  //  ensures that `window.open` is run from `UvRunOnce()`.
  setImmediate(async () => {
    const p = new Promise(resolve => {
      window.addEventListener('message', resolve, { once: true });
    });
    window.open('#foo', '', 'nodeIntegration=no,show=no');
    const e = await p;

    window.close();
  });
}
</script>
</body>
</html>