17. november 2012 - 12:46 Der 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.)

hvordan gør jeg dette ???


Kristian
Avatar billede TryingToImprove Nybegynder
17. november 2012 - 14:23 #1
Hej Kristian.

Et eksempel uden jQuery, kan du se her: http://jsfiddle.net/PWdhW/11/ og en demo her: http://fiddle.jshell.net/PWdhW/11/show/light/#erik

Håber dette hjalp dig. Hvis du bruger jQuery, kan du gøre det på en anden måde.. :-)
Avatar billede claes57 Ekspert
17. november 2012 - 14:39 #2
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.
Avatar billede TryingToImprove Nybegynder
17. november 2012 - 14:48 #3
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.

http://jsfiddle.net/PWdhW/20/ og en demo http://fiddle.jshell.net/PWdhW/20/show/light/#erik
Avatar billede TryingToImprove Nybegynder
17. november 2012 - 14:49 #4
Ifølge http://caniuse.com/#search=onhashchange, så vil onhashchange virke til

IE8+, Firefox 3.6+, Chrome 5.0+, Safari 5.0+
Avatar billede olebole Juniormester
17. november 2012 - 16:54 #5
<ole>

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.

Hvordan skal du bruge løsningen?

/mvh
</bole>
17. november 2012 - 17:22 #6
HEJ

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 ...

Kristian
Avatar billede olebole Juniormester
17. november 2012 - 17:35 #7
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
Avatar billede TryingToImprove Nybegynder
17. november 2012 - 17:45 #8
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.

SKABELON
[code]
<html>
<head>
<style>body{ background:blue }</style>
</head>
<body>
{{ReplaceMe}}
</body>
</html>
[/code]

Anders
[code]
<h1>Anders</h1>
<p>anders data</p>
[/code]

Kode (pseduo kode)
[code]
var hentSkabelon = getFile("skabelon.html");
var hentData = getFile(name + ".html");

var html = hentSkabelon.replace("{{ReplaceMe}}", hentData);

browser.viewHtml(html);
[/code]


Ved ikke om dette er muligt^^
Avatar billede olebole Juniormester
17. november 2012 - 18:11 #9
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
17. november 2012 - 18:22 #10
HEJ

Tak for svar.

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.

Kristian
17. november 2012 - 18:24 #11
HEj OLEBOLE,

Da jeg skrev mit indlæg (det sidste) var dit indlæg ikke kommet til mig endnu. Jeg kan se at her tænker vi omtrent parallelt.

Morsomt.

Kristian
01. december 2012 - 17:10 #12
Fundet en GOD læsning, så lukker spm.
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

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