<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>