OnUnload-event van popup zetten vanuit parent

Pagina: 1
Acties:

  • deviltje
  • Registratie: Juli 2000
  • Niet online
Ik hoop dat de titel al duidelijk genoeg is, maar hieronder toch een uitleg.

Ik heb een pagina en vanuit die pagina wordt een popup ge-opend. Helaas heb ik over de html in deze popup geen controle. Maar het is wel de bedoeling dat ik een actie in mijn pagina ( de parent ) uitvoer als de popup wordt gesloten.

in was dus van plan om nadat ik popup open ( mbv window.open ) om via een script het onunload event een functie te laten uitvoeren die in de parent staat...

Helaas wil dit niet zo lukken... iemand ideeen over hoe dit aan te pakken ?

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Staat de pagina op jouw domein? Zo nee dan kun je het vergeten. Zo ja, dan heb je vast zelf al wat geprobeerd. Zo nee, jammer dan.. zo ja, wat heb je al geprobeerd? :P

  • deviltje
  • Registratie: Juli 2000
  • Niet online
dit is zo'n beetje de bedoeling
code:
1
2
3
4
5
6
7
8
9
10
function openForm()
{
  formulier=window.open("formulier.html", "formulier","");
  window.formulier.onunload = closeform;
}
    
function closeform()
{
  alert('bla');
}


de pagina die wordt opgeroepen staat dus opzelfde domein...

[ Voor 26% gewijzigd door deviltje op 04-09-2003 09:41 ]

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • deviltje
  • Registratie: Juli 2000
  • Niet online
Ik heb ook nog even met addEventListener ( mozilla ) en attachEvent ( IE ) zitten proberen.. maar ook dat werkt niet lekker

[ Voor 89% gewijzigd door deviltje op 04-09-2003 09:41 ]

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

De functie die je attached aan je popup wordt natuurlijk uitgevoerd vanuit de scope van het popup window; je wilt echter een functie in je opener uitvoeren. Probeer het volgende eens:
JavaScript:
1
2
3
4
5
6
7
8
9
10
function openForm()
{
  var popup = window.open("formulier.html", "formulier","");
  popup.onunload = function() { if (opener && opener.closeform) opener.closeform(); }
}
    
function closeform()
{
  alert('bla');
}


(voor de duidelijkheid de variabele en het window object even andere namen gegeven, en een check ingebouwd of de opener nog wel bestaat op het moment van sluiten)

[ Voor 16% gewijzigd door crisp op 04-09-2003 09:48 ]

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Werkt ook niet... dus... :)

Jouw code dus crisp ;)

[ Voor 157% gewijzigd door Bosmonster op 04-09-2003 09:58 ]


  • deviltje
  • Registratie: Juli 2000
  • Niet online
crisp schreef op 04 September 2003 @ 09:47:
De functie die je attached aan je popup wordt natuurlijk uitgevoerd vanuit de scope van het popup window; je wilt echter een functie in je opener uitvoeren. Probeer het volgende eens:
Helaas geeft dit ook geen resultaten...

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

zelf ook even getest; blijkbaar wordt de attached functie toch in de scope van de opener uitgevoerd, dit werkt in Mozilla (met een kleine timeout tussen openen van de popup en het toevoegen van de event handler aan het window object):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var popup;

function openForm()
{
  popup = window.open('formulier.html', 'formulier', '');
  setTimeout('attachOnunload()', 100);
}

function attachOnunload()
{
  popup.onunload = closeform;
}
   
function closeform()
{
  alert('bla');
}


IE geeft echter geen krimp, wat mij duidelijk een bug lijkt. Dan zit er dus niets anders op dan in formulier.html zelf een onunload functie te zetten die checked of er een opener is en dan closeform in de opener aanroept.

Intentionally left blank


  • deviltje
  • Registratie: Juli 2000
  • Niet online
crisp schreef op 04 september 2003 @ 10:24:
zelf ook even getest; blijkbaar wordt de attached functie toch in de scope van de opener uitgevoerd, dit werkt in Mozilla (met een kleine timeout tussen openen van de popup en het toevoegen van de event handler aan het window object):
Die time-out deed de truc..
Ik had nog een addEvent functie liggen
JavaScript:
1
2
3
4
5
6
7
8
9
function addEvent(el, evname, func) 
{
    if ( document.addEventListener ) 
        el.addEventListener(evname, func, true);
    else if ( document.attachEvent )
        el.attachEvent("on" + evname, func);
    else
        eval( "el.on"+ evname +"="+func+";" );
};


aanroep:
addEvent( popup, "unload", closeform );

en deze in combinatie met de time-out werkt goed in IE en mozilla ( op windows ) .. nog even de rest testen..

[ Voor 5% gewijzigd door deviltje op 04-09-2003 10:40 ]

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

dus alleen via de DOM of via het IE5+ event model; leuk om te weten :)

Intentionally left blank

Pagina: 1