06. september 2012 - 14:10Der er
16 kommentarer og 2 løsninger
Fang tryk på tilbage-knappen
Jeg har en side med rigtigt meget dynamisk indhold. Faktisk indlæses alt dynamisk via Ajax og Javascript.
Derfor er det uheldigt hvis folk trykker på "tilbage" da de så forlader min side og ender hvor de var før de klikkede sig ind på min side.
Så det jeg godt kunne tænke mig, var at kunne opdage at folk trykker på tilbage, og gør noget andet i stedet for. - fx at jeg kalder en javascript, fx ved navn "tilbage();"
På den måde kan jeg sende brugeren til det indhold de tidligere så, frem for at de forsvinder væk fra siden helt.
...men hvordan - og kan det overhovedet lade sig gøre?
Det er der ikke nogen standardiseret metode til. Der har gennem tiden eksisteret forskellige dårlige hacks, men der er ikke noget, som fungerer ordentligt - og hvad ville du have ud af det? Når først brugeren har trykket på knappen, kan du ikke cancel'e handlingen. Back knappen er en del af browserens navigationsværktøjer, som naturligvis ikke må kunne disables.
Men det er der jo ikke noget nyt i. Sådan har vi siden begyndelsen af 90'erne levet med, at en browser virker ... og det er jo gået meget godt =)
Jeg synes dog jeg har læst, et eller andet sted, at man i nyere browsere kan styre back-knappen mere end det hidtil har været muligt. Dette er jeg dog slet ikke sikker på, så betragt det som en teaser til at du selv undersøger det lidt nærmere. Det kan være andre her på eksperten kan be- eller afkræfte dette (men det har Ole jo nok allerede gjort i sit indlæg)...
- men hvordan skal jeg så bære mig ad med at vende tilbage til siden før - hvis det er det, jeg som bruger ønsker?
Er fejlen ikke, at man (formodentlig fejlagtigt) forestiller sig, at ens egen side er så blændende fantastisk, at ingen nogensinde vil ønske at forlade den - og derfor kan tillade sig at disable brugerens navigationsmuligheder? Der er jo ingen, der siger, at brugeren ikke ønsker at navigere væk fra siden *o)
Men spørgeren har jo fundet den ultimative hjemmeside, så du behøver ikke springe tilbage og hvis du ønsker at springe tilbage, så er det naturligvis for at se de genialiteter sitet havde at byde på, på det forrige skærmbillede... og ikke det inferiøre site man kom fra.
Anyway! Er der så en konstruktiv forslag til en måde, hvorpå man kan registrere navigation fremad, således ens history kommer til at indeholde de handlinger man har foretaget sig på den side der er komplet styret af AJAX-opdateringer. Kunne det evt. være noget med navigere til en hashed url (á la #updateX, hvor X er et fortløbende nummer), således der opbygges en history uden at siden faktisk skifter...?
Bruger du i øvrigt et JS MVC framework (f.eks. AngularJS)?
Nogle af disse giver mulighed for at "route" indhold, som det kendes fra f.eks. .NET Routing, som bla. MVC gør brug af, men altså uden at siden skifter som sådan. Såvidt jeg husker gør AngularJS det vist via hash-værdier i url'en (in-page-links?)... mon ikke det er metoden du søger. Jeg tror i øvrigt AngularJS kunne være rigtig interessant for dig at kigge på, hvis du altså ikke allerede benytter dig af et JS MVC framework...
- og det kræver så, at man detekterer location.hash, når siden loades - og loader de tilhørende data. Ellers er det jo heller ikke muligt at sende et link til en specifik sidetilstand til en ven
Og selvfølgelig er min side så blændende fantastisk, at ingen nogensinde vil ønske at forlade den ;-)
Nej ok, i har ret i at jeg ikke lige havde tænkt på at jeg faktisk ville fange brugeren på siden ved den fremgangsmåde, og det er jo egentligt ikke meningen. Jeg er bare træt af at det ind imellem sker ved et uheld.
Men kan godt se der nok ikke er en foolproof måde at gøre det på, og så er det måske i virkeligheden bedre at lade helt være - i stedet for at gøre det halvt så det virker for nogen men ikke andre, og kun i få situationer :-(
Problemet er netop, at man kan 'spærre' en bruger inde på sitet - bevidst eller ubevidst. Derfor har browserleverandører altid forsøgt at gøre den slags vanskeligt/umuligt i takt med teknologiens og opfindsomhedens udvikling =)
Du skal i øvrigt tænke på, at søgemaskiner ikke læser JavaScript og derfor heller ikke umiddelbart selv ser dit Ajax-loadede indhold. Du må servere indholdet specielt for søgemaskinerne, enten via et MVC-framework eller noget funktionalitet efter princippet i #9
Hvis det er en backendløsning, synes jeg stadig du bør tage nogle timer ud af kalenderen og kigge på AngularJS. Det ser virkelig interessant ud, hvis du tænker i retning af at lave en singlepage-løsning. Det har en masse værktøjer, bla. til at gøre kobling af data mellem UI og JS-objekter let, routing (som skulle håndtere din aktuelle udfordring) og mange andre features.
Det er Google der står bag det, så jeg vil tro det får den fornødne opmærksomhed (i det mindste indtil de skrotter det ;-)).
Jeg ved ikke nok om standarderne til at kunne udfordre dig på den udtalelse, så det skal nok passe. Kan du give nogle eksempler på specifikke features du hæfter dig ved, som ikke overholder standarderne for HTML5?
Hvis man bruger det i et homogent miljø, hvor man har en vis grad af kontrol over, hvilke klienter der skal køre systemet, har man i det mindste mulighed for at teste om det kan køres af dem der måtte have behov for dette...
@softspot: Jo og nej. HTML5 er ikke en standard efter den gamle definition. Skal man på den anden side holde sig til den definition, når HTML5 først 'Recommendation' status i 2022 - og bliver først dermed endelig standard.
Derfor har man valgt at lade HTML5 adskille sig væsentligt fra tidligere versioner med en inkrementel model. Altså en model, hvor de enkelte features bliver implementeret efterhånden som modulerne når 'Canididate Recommendation' status (eller endda før) - hvilket i skrivende stund er tilfældet med langt de fleste.
Efter at have kikket lidt mere på AngularJS, kan jeg dog se, at det faktisk er muligt at overholde HTML5 - hvis man prefikser alle direktiver/attibutter med 'data-'. En mulighed, man skal grave godt i dokumentationen for at finde =)
Synes godt om
Ny brugerNybegynder
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.