Avatar billede monkeysee Nybegynder
06. juli 2003 - 20:43 Der er 8 kommentarer og
1 løsning

onbeforeunload event

Jeg har en række dokumenter i IFRAME's, og hver af dem har tilknyttet en "unbeforeunload" event (proprietær tag som kun fungerer i MSIE). Når man forsøger at forlade en side, kan jeg tillade, eller forhindre det, alt efter situationen.

Men hvordan kan man finde ud af hvilket dokument (IFRAME) der har affødt denne event? Så vidt jeg har kunnet finde ud af i MS' dokumentation kan det ikke lade sig gøre at lave f.eks en event.srcElement...eller?

Link:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/events/onbeforeunload.asp
Avatar billede roenving Novice
06. juli 2003 - 21:33 #1
<ELEMENT onbeforeunload = "handler" ... >

som teksten siger ...

handler er en hel normal javascript-funktion, som kan modtage parametre, som i en frame kan være:

onbeforeunload="return confirm('Er du sikker?');" -- dropper unload, hvis der ikke svares ja !-)

i en anden kan være:
onbeforeunload="top.location.reload(true);return false;" -- genindlæser hele vinduet ...

osv.

hth
jes
Avatar billede roenving Novice
06. juli 2003 - 21:36 #2
MEN jeg ville være meget forsigtig med at forhindre unloads af vinduer -- jeg er nemlig selv en af de surfere, som ville droppe et site fuldstændig, hvis der gøres noget ved mig, som jeg ikke har 'gjort' selv !o]
Avatar billede monkeysee Nybegynder
10. juli 2003 - 17:34 #3
roenvig - sådan fungerer det altså ikke. Denne event skaber en dialogboks som siger "Do you want to leave this page?...Yes/No" (på dansk eller engelsk alt efter den installerede browser), og det eneste argument man kan give den er event.returnvalue - som den så tilføjer som "Do you want to leave this page?...<min værdi>"...Yes/No.

Men bare rolig, det er såmænd ikke en almindelig "surferside" det er snarere en HTML applikation med Multiple Document Interface (ellers ville jeg aldrig bruge propritære IE-only tags)
Avatar billede roenving Novice
10. juli 2003 - 17:45 #4
Ja, så forstod jeg altså ikke M$s tekst -- og dengang havde jeg ikke pillet igennem på den event, netop fordi den havde synes mig uinteressant ...

Men du kan faktisk gøre noget, som dette eksempel viser:

onbeforeunload="alert('Test');event.returnValue='Hvis du lukker siden nu mistes alle data!';"

-- hvilket vil sige, at du f.eks. kan sætte en eller anden proces igang inden du tillader IE-spørgsmålet ...

hth
jes
Avatar billede monkeysee Nybegynder
10. juli 2003 - 21:13 #5
Fedt du stadig tjekker vores tråd her på eksperten. Jeg var lige et smut ude i sommerlandet, men nu er jeg tilbage ved tastaturet!

Hmm...det jeg har brug for er, at annullere eksekvering af mit script, såfremt brugeren trykker på Cancel/Annuller, og allerbedst med mulighed for at afgøre navnet på dokumentet som affyrede event'en.

Jeg sætter adskillige steder værdien for "document.location.href" i en iframe som altså har "onbeforeunload" tilknyttet. Hvis brugeren så annullerer indlæsningen af den nye side, bliver jeg nødt at "lade som ingenting" da jeg jo ikke på nogen måde kan afgøre om siden blev hentet eller ej (og det vil da være åndsvagt at skulle til at lave et script som nøjes med at trille tommelfingre og vente på at der bliver sagt "her er jeg" når vores side (måske!) bliver hentet).

Så hvis jeg kunne sige:

if(document.location.href='http:/127.0.0.1'){
//det lykkedes at sætte location property
}else{
//bruger annullerede
}

ville det være perfekt!
Hvis du forstår hvad jeg mener ....
Avatar billede roenving Novice
10. juli 2003 - 21:17 #6
alert er jo en javascript-funktion, så du kunne jo sætte en variabel i parent-vinduet, feks.

onbeforeunload="parent.unloaded=this.name;event.returnValue='Hvis du lukker siden nu mistes alle data!';"
Avatar billede monkeysee Nybegynder
10. juli 2003 - 21:55 #7
Klart! Det løser "problemet" med at fortælle brugeren hvilket dokument han/hun er i færd med at lukke (jeg tilføjer document.title til event.returnvalue). Nogle gange mister man overblikket i de store script's, og glemmer fundementale funktioner. Kender du følelsen?

Det måtte gerne være ligeså let at konstatere at event'en blev annulleret...men det er jeg lidt bange for at det ikke er...det er jo en underlig størrelse event med dens egen interface osv.
Avatar billede roenving Novice
10. juli 2003 - 23:05 #8
Jeg ville lige prøve om der var noget, jeg kunne identificere, at unload ikke blev udført, og det var der !-)

onbeforeunload="setTimeout('jaaa()',1000);event.returnValue='Hvis du lukker siden nu mistes alle data!';">

Jeg havde en alert i funktionen, den kom øjeblikkelig, hvis jeg vemtede længere end det sekund, der var, eller så det ud til, at den var præcis ...

-- testede den dog ikke for alvor !o]
Avatar billede monkeysee Nybegynder
19. august 2003 - 20:26 #9
Svarer lige på sprgsm...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester