Quello del tempo e` un problema.

window.open() lancia un processo, poi prosegue. Nella fienstra figlia si deve caricare una nuova pagina.

Oltre ai trucchi proposti da Pietro, si puo` pensare qualcosa di questo tipo:

function apri() {
var mywin = window.open(...);
mywin.onload = finito;
}

function finito() {
mywin.myfunction();
mywin.onload = false; // nota1
}

nota1: non sono sicuro di questa sintassi. Dovrebbe servire per eliminare l'evento onload, in caso vanga caricata una nuova pagina.

---

In alternativa:
var mywinLoaded = false;

function apri() {
var mywin = window.open(...);
mywin.onload = finito;
}

...

NELLA POPUP:
<body onload="window.opener.mywinLoaded=true;">