Avatar billede laksen Nybegynder
20. august 2006 - 21:04 Der er 27 kommentarer og
1 løsning

Advarsel når bruger forlader siden

Hej eksperter

Kan man få en side til at komme op med en advarsel, når brugeren forlader siden? Det kunne f.eks. være hvis han indtaster en ny adresse, klikker videre på siden via et link osv.

Grunden til jeg skal bruge det er at brugeren køber adgang til at loade en bestemt side. Går han væk fra den kan den ikke hentes igen.

Derfor vil jeg gerne advare, så brugeren ikke går væk fra siden ved en fejl.

Håber I kan hjælpe!
Avatar billede webudvikleren Nybegynder
20. august 2006 - 22:13 #1
Går væk fra siden, mener du når man lukker siden, eller bare går til et nyt link?

Prøv

<body onunload="alert('Er du nu sikker!? - kom gerne igen!');">
Avatar billede mclemens Nybegynder
20. august 2006 - 22:23 #2
Se evt. også på:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
window.onbeforeunload=function(){return confirm("Vil du virkelig forlade de billeder af sildene du har betaLt for at se?");};
</script>

</head><body>
Et billede af nogle sild fra en fiskeauktionen<br><img src="sild.jpg">
</body></html>
Avatar billede mclemens Nybegynder
20. august 2006 - 22:25 #3
webudviklerens alert'er at de lukker siden - den
sidste jeg lagde alert'er med valg og gør
det muligt at undgå at lukke siden...
Avatar billede mclemens Nybegynder
20. august 2006 - 22:29 #4
alert'er med valg er dumt ordvalg -> Kaster en confirm box frem og returnerer værdien af valget til browseren (false hvis de vil blive) ... browseren reagerer så hvis det er false ved at spørge brugeren direkte uden om websitet om den skal stole på den false den lige fik ved at man valgte annuller... den dobbelt forespørgsel til brugeren kan ikke undgåes :/
Avatar billede mclemens Nybegynder
20. august 2006 - 22:33 #5
En ny script section:

<script type="text/javascript">
window.onbeforeunload=function(){if(!confirm("Vil du virkelig forlade de billeder af sildene du har betaLt for at se?"))return false;};
</script>

... den kom med dobbelt confirm box ved både ok og annuller ved den anden - dobbelt confirm box hvis første valg er ok kunne undgåes men ikke hvis første valg var annuller :o)
Avatar billede webudvikleren Nybegynder
20. august 2006 - 22:34 #6
Han spurgte efter funktionens navn. Jeg lavede bare alert'en for at han vidste hvad funktionen var, så kunne han jo eventuelt selv sætte en funktion ind ;)
Avatar billede mclemens Nybegynder
20. august 2006 - 22:36 #7
Ok, det er klart ... men regnede med at han ville hændre det og ikke kun sige det?
[ Derfor vil jeg gerne advare, så brugeren ikke går væk fra siden ved en fejl. ]
Avatar billede mclemens Nybegynder
20. august 2006 - 23:04 #8
Opsummerer lige: Funktionen man skal bruge hvis man vil forhindre at brugeren forlader siden ved et uheld det er onbeforeunload (20/08-2006 22:33:55) ... Hvis du kun skal kaste en alert eller køre noget andet når brugeren har forladt siden skal du bruge webudviklerens onunload (20/08-2006 22:13:57) ... den kan ikke bruges til at forhindre at brugeren forlader siden :)
Avatar billede mclemens Nybegynder
20. august 2006 - 23:07 #9
onbeforeunload kan også sættes på body som her:

<body onunload="if(!confirm('Vil du virkelig forlade de billeder af sildene du har betaLt for at se?'))return false;">
Avatar billede mclemens Nybegynder
20. august 2006 - 23:07 #10
<body onbeforeunload="if(!confirm('Vil du virkelig forlade de billeder af sildene du har betaLt for at se?'))return false;">
Avatar billede laksen Nybegynder
20. august 2006 - 23:16 #11
mclemens>

Din funktion passer lige til mit behov. Jeg har dog 2 spørgsmål:
1) Der er en <form> på siden. Når man submit'er skal man ikke spørges om man vil forlade siden men bare automatisk submit'e formen. Kan det lade sig gøre?
2) Hvis man svarer negativt på den confirm-boks der kommer frem kommer endnu en confirm-boks genereret af IE/Firefox. Kan man ikke nøjes med at få vist sin egen og ikke også samtidig den fra IE/Firefox?
Avatar billede mclemens Nybegynder
20. august 2006 - 23:33 #12
1> Yes, kigger lige på lidt combo ;)
2> Den ekstra popup fra selve browseren kan ikke undgåes - det er af sikkerhedshensyn (tænk hvis man gik ind på en side der ikke ville tillade at man lukkede vinduet(onunload=return false;")) - Jeg kunne kun fjerne den der dukkede op ved ok i 20/08-2006 22:23:52 ved at lave return false betinget ...
Avatar billede mclemens Nybegynder
20. august 2006 - 23:39 #13
Eksempel 1 på betinget confirm (onsubmit og okl variabel bruges)


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta

http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
okl=false; // Standard lukning af side eller videre surf giver confirm box
window.onbeforeunload=function(){if(!okl)if(!confirm("Vil du virkelig forlade de billeder af sildene du har betalt for at

se?"))return false;};
</script>

</head><body>
Et billede af nogle sild fra en fiskeauktionen<br><img src="sild.jpg">

<form method="get" action="#" onsubmit="okl=true;">
<input type="text" name="test" value="klik ok">
<input type="submit" value ="ok">
</form>
</body></html>
Avatar billede mclemens Nybegynder
20. august 2006 - 23:45 #14
Og sidste eksempel med et indbygget script hvis du nu har mange links man må klikke på ... den måler om der er sat en rel="external" på linket - hvis der ikke er sætter en onclick så alert'en ikke dukker op ved klik på linket :o) (onclick="okl=true;" kan selvfølgelig også sættes manuelt istedet) :o)





<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
window.onload=function(){
  as=document.getElementsByTagName("a");
  for(i=0;i<as.length;i++){
    if(as[i].rel!="external")as[i].onclick=function(){okl=true;};
  }
}
okl=false; // Standard lukning af side eller videre surf giver confirm box
window.onbeforeunload=function(){if(!okl)if(!confirm("Vil du virkelig forlade de billeder af sildene du har betalt for at se?"))return false;};
</script>

</head><body>
Et billede af nogle sild fra en fiskeauktionen<br><img src="sild.jpg">

<form method="get" action="#" onsubmit="okl=true;">
<input type="text" name="test" value="klik ok">
<input type="submit" value ="ok">
</form>

<a href="#12">Internt link ingen confirm</a><br>
<a href="#231">Internt link ingen confirm</a><br>
<a href="#231">Internt link ingen confirm</a><br>
<a href="http://www.eksperten.dk" rel="external">eksternt link confirm</a><br>
</body></html>
Avatar billede mclemens Nybegynder
20. august 2006 - 23:48 #15
... men confirm ved klik på tilbage, fremad som fører til samme url ... samt opdater, den samme url valgt fra adresselinjen, den samme url fra bookmarks og den dobbelt besked er noget der ikke kan undgåes ... desværre :/
Avatar billede laksen Nybegynder
20. august 2006 - 23:49 #16
Kan man evt. få siden til udelukkende at vise standard advarslen fra browseren?
Avatar billede mclemens Nybegynder
20. august 2006 - 23:53 #17
Ja, det kan vi godt :o)
Avatar billede laksen Nybegynder
20. august 2006 - 23:55 #18
og hvordan er den lige :)
Avatar billede mclemens Nybegynder
20. august 2006 - 23:55 #19
window.onbeforeunload=function(){if(!okl)if(!confirm("Vil du virkelig forlade de billeder af sildene du har betalt for at se?"))return false;};

rettes til:

window.onbeforeunload=function(){if(!okl)return false;};
Avatar billede mclemens Nybegynder
20. august 2006 - 23:57 #20
Det med links som #12 i 20/08-2006 23:45:07 ødelagde billedet lidt da det var links til den samme side - og derfor gjorde at den som sådan ikke blev reloadet så variablen blev sat til false igen ... men jeg ved ikke om du har # links på den side ...
Avatar billede mclemens Nybegynder
20. august 2006 - 23:58 #21
^ - Med ovenstående mener jeg at hvis man klikkede på:
<a href="#231">Internt link ingen confirm</a><br>

og herefter:

<a href="http://www.eksperten.dk" rel="external">eksternt link confirm</a><br>

... så gav den ikke fejl - kigger lige på det window.onload script ...
Avatar billede mclemens Nybegynder
20. august 2006 - 23:59 #22
<script type="text/javascript">

window.onload=function(){okl=false;
  as=document.getElementsByTagName("a");
  for(i=0;i<as.length;i++){
    if(as[i].rel!="external")as[i].onclick=function(){okl=true;};
    else as[i].onclick=function(){okl=false;};
  }
}
okl=false; // Standard lukning af side eller videre surf giver confirm box
window.onbeforeunload=function(){if(!okl)return false;};
</script>
Avatar billede mclemens Nybegynder
21. august 2006 - 00:00 #23
Jeg har sat en onclick på alle links med rel="external" også
... men ved ikke om behovet for den window.onload block er der :o)
Avatar billede laksen Nybegynder
21. august 2006 - 00:08 #24
det begynder jo at ligne noget :)

Kan du lige her til sidste fortælle mig hvorfor der i IE kommer et "false" ind midt i beskeden til brugeren? Det er tydeligvis ikke meningen og der kommer heller ikke noget "false" inde i beskeden i Firefox
Avatar billede mclemens Nybegynder
21. august 2006 - 00:12 #25
Det er browser specifikt false er det jeg returnerer for at undgå at siden lukkes, det accepterer ingen browsere da det som sagt kunne forårsage at man ikke kunne lukke siden ... Brugerne af siden forstår slevfølgelig ikke hvorfor der står false så fornuftige Firefpx skriver det ikke ... ser lige om vi kan returnere noget andet - men false er det mest korrekte at bruge :/
Avatar billede mclemens Nybegynder
21. august 2006 - 00:14 #26
Prøv at skifte:

window.onbeforeunload=function(){if(!okl)return false;};

til:

window.onbeforeunload=function(){if(!okl)return "";};

... så returnerer den et mellemrum
istedet (mellemrummet kan jeg ikke undgå)...
Avatar billede laksen Nybegynder
21. august 2006 - 00:26 #27
Så bliver det vist ikke bedre.

Tusind tak for hjælpen!
Avatar billede mclemens Nybegynder
21. august 2006 - 00:41 #28
Velbekom, og tak for point :o)
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