17. november 2012 - 12:46Der er
11 kommentarer og 1 løsning
fange en parameter i kald af side
Hej
På en HTML-side har jeg en menu med NAVNE. (Anders, Bjarne, Christian, Dan, Erika ... osv.)
Klikker jeg på Anders skal Web-siden linke til siden html-siden "NAVNE.htm" i afsnittet "Anders".
Det gøres sådan: Kald : href="navne.htm#anders" (href="navne.htm#bjarne" for bjarne osv... )
Men, jeg ville gerne have at jeg med Javascript kunne fange dette #anders (#bjarne) INDEN sides sættes op, så jeg kan nå at sætte sidens CSS-kode(r).
Jeg havde nemlig tænkt mig at lave 5 (Anders-Erika) sektioner hvor KUN den valgte bliver aktivt vist , resten sættes som "hidden" / non visible. Og derfor må jeg fange "#anders" og sætte #anders parametre aktive (dvs. #bjarne m.fl parametre sættes som skjulte.)
i head: <script language="JavaScript"> <!--- var user = location.hash; //---> </script>
og dine link skal have en dummy-parameter med også, fx <a href="navne.html?p=0#anders">Anders</a> <a href="navne.html?p=1#dorthe">Dorthe</a> <a href="navne.html?p=2#ole">Ole</a> ellers opdaterer siden ikke. på siden kan du så fx <script type="text/javascript"> <!-- document.write("<hr>" + user + "<hr>"); //--> </script>
den udskriver inkl #, fx #dorthe men du kan selv fjerne første tegn.
Jeg har opdateret min løsning, så den kan du kan klikke på links. Som @claes57 siger, så bliver du nød til at have en dummy parameter med ?p=0, med mindre du henvender dig til nyere browsere, så kan du bruge onhashchange.
Her er et simpel med brug af onhashchange, og onload.
Den gode løsning kommer lidt an på, hvad det skal bruges til. Er der tale om dynamisk indholdsindlæsning (med Ajax), må du endelig ikke sætte et dummy argument - som vist i #2.
Er der ikke tale om en Ajax-løsning - men en løsning, hvor siden reelt skiftes - er det ulogisk og uhensigtsmæssigt at benytte adressens hash (f.eks: #anders). At sætte et dummy argument er blot at gå overåen efter vand =)
I stedet bør du så bruge en ganske almindelig query: ?navn=anders.
Jeg har et Delphi (7) program med en Embedded Webbrowser (WB1). Jeg loader en startside (forside.htm) ind i denne WB og fra denne WB side ønsker jeg under Delphi-kontrol at kunne kontrollere load og retur af hvilken som helst HTM-side jeg ku' finde på at sende ind i samme WB. Det fungerer udmærket
I HTM-siden NAVNE (navne.htm) vælger jeg en bruger (Anders- Erika) hvor du på denne side kan vælge forskellige opsætningsparametre (farver- sprog etc.).
Jeg er ikke interesseret i at Anders kan se Bjarne - Erika 's opsætningsparametre og derfor har jeg brug for at kunne skelne mellem brugerne (passord og login sker før de kan vælge NAVNE-htm) og er under delphi kontrol. Kald af siden ("NAVNE.HTM#anders") er således kontrolleret af Delphi så Bjarne kan IKKE se ("NAVNE.HTM#anders") endsige komme ind på den.
(WB højre knap med dertil hørende funktioner er Disabled ).
Jeg kunne bruge 5 sider (Anders.htm --> Erika.Htm) og kontrollere det på den måde, men det er ikke "the Delphi-way ".... synes jeg.
(Siden Navne.htm er krypteret på disken , dekrypteres som en stream, relevante opsætnings-parameter lægges ind som JAvaScript variable som køres ved <Body onLoad=setinit()> og så "hældes" siden i WB'en.)
Derfor kan PHP-løsninger ikke bruges.
Det er derfor vigtigt at systemet kan skelne om det er anders eller erika som er aktiv...
Det jeg hade tænkt mig var at ved opsætning af siden, blev det konttroleret at bjarne var bjarne (med (Javascript) og så blev hans side gjort aktiv og derefter præsenteret.
Men er lydhør overfor andre (og bedre(?) ) forslag ...
Jeg er stadig ikke helt klar over, hvordan scenariet præcist ser ud =)
Indeholder navne.htm i udgangspunktet alle navne og info - eller er det noget, du læser ind fra Delphi? Er det en alm. HTML-side, du vil hoppe op og ned på - eller bliver navne og info indskrevet efterhånden?
At have alle navne og info liggende i dokumentet og bare hoppe op og ned, synes jeg ikke lyder som en særlig sikker løsning
Hej Kristian. Jeg ville mene at du skulle bruge 5 sider for kun af få indholdet fra f.eks. "Anders".
Du har ikke mulighed i JavaScript for at forhindre at informationer om "Erik" kommer med når du requester "Anders". Du kan blot skjule disse (<div>'s eksempelvis).
Jeg ved ikke om du kunne hente en side med Delphi med en skabelon, og så hente en anden side med Delphi med specifik indhold og så smelte det sammen og vise det.
Jeg har selv lavet nogle lignende ting i .NET og bruger netop en skabelon.
Skabelonen bliver læst op i hukommelsen. Herfra kan den trækkes ind i en funktion sammen med de data, der skal vises - hvergang nye data requestes.
Funktionen henter data fra en embedded ressourcefil, som indsættes med RegExp i en klon af skabelonstrengen. Til sidst streames den resulterende streng ned i browserkontrollens dokumentobjekt
Jeg tror selv på at den bedste løsning ville være følgende:
(Pseudokode:)
HTmlfil : ansiString;
Variable := HentDatafradatabaser('Anders'); // hent info om anders om omdan til JavaScripts-format ..
HtmlFil := HentKrypteretfil('Navne.htm'); // HtmlFil := Decrypt(HtmlFil); // Fil er nu klartekst IndsertJavaKodeScripts(Htmlfil, Variable); // Indskriver JavaScripts funktioner og variable for Anders.htm i HTMLfil
HtmlFilStream := TextToStream(HtmlFil); // lav om til stream
Webbrows.LoadfromStream(HtmlFilStream); // Vis resultat
Måske ikke så meget the Delphi-way, men i hvertfald mere sikker (og det kræver ikke kendskab til DOM- faciliteter som er svært avancerede - kan måske komme i version 3,141592 (hehe) .)
Kræver dog at det kun er Anders som får sine data med .
Men er stadig lydhør overfor avancerede løsninger.
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.