Avatar billede kasseper Nybegynder
11. juli 2001 - 11:41 Der er 14 kommentarer og
1 løsning

IE ekspert søges - ONBACK event emulering

OK, jeg har haft denne op og vende før, men min umiddelbare løsning fungere altså ikke aligevel...
(
http://www.eksperten.dk/spm/82428
Og jakoba\'s svar til sidst dudder heller ikke....
)

Men sagen er som sagt den at jeg har en side hvor en Iframe reloader en masse gange, og når man så trykker på BACK så er det kun i iframen hvor man hopper tilbage. Det skal være sådan at det er hele vinduets url der skifter.

Jeg har haft forskellige ideer selv, men har ikke rigtigt kunne udføre dem korrekt.

Her er nogle af dem til inspiration :
1) Slette history objectet, ved hver reload af iframen...
2) Studeret lidt i msdn.online\'s doc. om iframes, men der er \'rigtig\' mange attributter, og det kan da godt være en der kan bruges....?(http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/IFRAME.asp?frame=true)
3) Der skulle være nogle DHTML behaviors mht. persistence (http://msdn.microsoft.com/workshop/author/persistence/overview.asp?frame=true)


Jeg er ret hårdt ramt, derfor det store pointantal, men jeg er tilgengæld også ret optimistisk, da jeg tror at med \'MEGET\' microsoft specifik kode kan løse næsten alle problemer, så derfor vil jeg også være så fræk at sige at selvom man påstår at det ikke kan lade sig gøre, kan man ikke få hele point summen.

Så på med microsoft vanten og ned i bøgerne, eller hvad i nu vil bruge.
OG HUSK : Det skal bare kunne køre på IE 5.0 +
Så bare brug alle de microsoft komponenter som i kan komme i tanke om, de må bare skulle downloades først, men komme med browseren...

Anyway help wanted

Kasseper 
Avatar billede jumper Nybegynder
11. juli 2001 - 11:54 #1
Tja, forslag er aldrig af vejen :

I din hovedside laver du en onkeydown event handler, der fanger hvorvidt brugeren trykker på Backspace. Hvis han gør, sætter du enten fokus til top window objektet og lader browseren finde ud af det, eller kalder selv top.history.back().

document.onkeydown=CheckBack;

Hvordan vi laver CheckBack funktionen kan der så være flere forslag til:

function CheckBack(){
  var key = event.keyCode;
  if (key == 8){
    // Sæt fokus til top og se om browseren selv kan
    top.focus()
  }
}

eller

function CheckBack(){
  var key = event.keyCode;
  if (key == 8){
    // Vi prøver selv
    top.history.back()
  }
}

Du kunne selvf. også blot helt annulere Backspace fra at kunne gøre noget:

function CheckBack(){
  var key = event.keyCode, el=event.srcElement, tagName=el?el.tagName:\"\";
  if (key == 8 && (tagName!=\"INPUT\" && tagName!=\"TEXTAREA\") ){
    // Lad os annullere Backspace
    event.keyCode = 0;
    event.cancelBubble = true;
    setTimeout(\"GoBackForReal()\",10);
    return false;
  }
}

Nu hvor Backspace er annulleret, skal vi så blot lave GoBackForReal() funktionen. Der er 2 måder:

function GoBackForReal(){
  top.history.back()
}

eller at du selv siger hvilken side der skal gåes til:

function GoBackForReal(){
  top.location.href = \"DinSide.html\"
}

/Thor
Avatar billede jakobandersen Nybegynder
11. juli 2001 - 12:07 #2
Hvad så med browserens tilbageknap?
Avatar billede jumper Nybegynder
11. juli 2001 - 12:09 #3
moonduck, du kan ikke opdage om brugeren trykker på Back knappen. Hvis du har lyst, kan du bruge onunload eller onbeforeunload til at opdage at siden forlades. Det er vel heller ikke det store problem, kasseper kan blot åbne siden i et nyt vindue uden menubaren ;)

/THor
Avatar billede kasseper Nybegynder
11. juli 2001 - 12:24 #4
Jeg er ikke helt med...!
Jeg kan ikke åbne siden uden menubare...Det er ikke en mulighed.
Der er altså en tilbageknap, som ved et klik skal hoppe tilbage til den side der var før....MEN i hovedsiden.
Avatar billede kasseper Nybegynder
11. juli 2001 - 12:27 #5
Omformulering :
Det er en udemærket metode til at annullere backspace (den havde jeg også godt selv impl...)
Men det er netop back-knappen der er problemet !
Jeg er underlagt et krav om at der skal være en menubar, så det går ikke...!
Avatar billede jumper Nybegynder
11. juli 2001 - 13:46 #6
okay, hvad er det så præcist at du vil ?

/Thor
Avatar billede kasseper Nybegynder
11. juli 2001 - 14:04 #7
OK, jeg ridser lige op igen :
(Det hele er ved at være ret stort, så i må lige ha mig undskyldt hvis jeg har problemer med at formulere mig forståeligt)...OK here we go :

------------------------------------------------------------------------------------

Jeg har en side hvor jeg har 2 bokse. (herfra boks1 og boks2)
I boks1 findes der en liste af ord, som man kan klikke på.
Boks1 ligger i en iframe.
Når man klikker på et ord, så reloader boks1,
boks1 loader så en ny liste af ord, altefter hvilket ord du har klikket på.
Når så boks1 har loadet færdig, overføres det ord som man klikkede på til boks2,
som ligger i hovedsiden.

Ok, så langt så godt.

Når man så klikker på et ord i boks2. Skal boks1 også reloade, men tilbage til den liste
af ord som indeholder det ord som man klikkede på i boks2. Og alle ord i boks2 fra det man klikkede på + sig selv, skal slettes.

Man kan anskue det som navigation ned gennem et stort træ. Boks2 angiver den sti du har gennemgået indtil nu, mens boks1 indeholder de valgmuligheder du har fra den nuværende position.

Det virker som det skal. Men når man så klikker på Back, hopper man tilbage i træet, og da man overfører ved OnLoad, så overføres der igen fra boks1 til boks2, dvs. at der står 2 gange det samme ord i boks2.
Det er det ene problem ved Back, men det andet er at jeg skal helt tilbage til siden før denne navigations side.....

Og jeg må desvære ikke fjerne menubaren.

Er det en bedre forklaring ?

Avatar billede jakoba Nybegynder
12. juli 2001 - 20:08 #8
Er det et krav at der skal reloades for hvert valg?

Hvis datamængden ikke er alt for stor kunne man hente samtlige ordlister ind i javascript variable på den oprindelige side og derefter dynamisk opdatere de 2 selctbokse med javascript.

Til allersidst kommer der så en \"ja det er det jeg ville vælge\" knap der submitter den valgte sti igennem listerne.

mvh JakobA
Avatar billede kasseper Nybegynder
13. juli 2001 - 08:55 #9
Ja det er den desvære nød til !
Det er en ret stor datamængde, så med et 56 K modem vil det nok taget et par timer at loade hele datamængden, :)
Avatar billede jakoba Nybegynder
13. juli 2001 - 11:22 #10
Så vi har en træstruktur der deler sig i N (variabel) undertræer ved hver forgrening. Jeg kan ikke forestille mig mere end 15-20 forgreninger fra rod til blade, så selvom også N kan være så stor som hundrede vil det ikke koste mere end 20*100 listeelementer\'s plads at huske de lister der indtil videre er foretaget valg i. Det må være overkommeligt.
Samtidig kan hele den hidtidige udvælgelse huskes som en række tal (4,17,35,22,... for 4\'de valg i første liste, 17\'ene valg i anden, 35\'te valg i tredie, etc).
Så mon ikke siden kan implementeres som en stakstruktur hvor der efterhånden push\'es flere og flere valg, og hvor brugeren kan ombestemme sig og pop\'pe et eller flere valg.
Hvert element i stakken skal så være et objekt
stakelem.valg = integer;      // det nummer brugeren valgt i listen over.
stakelem.liste = liste loadet fra server; // på basis af DET valg nummer.

Når brugeren klikker i boks 2 er det valg han klikker på så det sidste der ikke skal slettes. Der er ingen brug for reload. Boks 1 skal blot genskrives udfra listen og senere elementer i boks 2 (og stakken) skal slettes.

ved klik i boks 1 skal der loades ny valgliste hvilken valgliste der skal loades bestemmes eentydigt af den udvalgte-tal liste vi vedligeholder.

Hvad med at gøre det i en skjult ramme? så kan vi bruge get, eller urlparametre uden at det kan ses. eg:

<frameset rows=\"100%,*\">
  <frame src=\'side_med_selectbokse_og_script.html\' name=\"hovedramme\">
  <frame src=\'about:blank\' name=\"henteramme\">
</frameset>

og load sker med:
  parent.frames.henteramme.location.replace( \"db_io_fil.php?\"+escape(udvalgte_tal_liste) );

en fast bestanddel i \"db_io_fil.php\" er så en onload event der trigger hovedsiden til at hente den nye liste, lægge den ind i boks 1 og enable boks 1 igen (den disables efter hvert valg i boks 1).

Er det en mulighed eller er der associerede data (fx billeder) der skal hentes med sammen med listerne, så det stadig er for store datamængder der skal huskes hos klienten?

mvh JakobA
Avatar billede kasseper Nybegynder
13. juli 2001 - 12:45 #11
Hej JakobA

Det lyder som en mulighed, desvære kræver det meget store ændringer i applicationen som den er nu, dermed vil det tage for lang tid, at implementere, og det er tid som jeg desvære ikke har...:(
Så jeg kan ikke umiddelbart bruge løsningen, men vil nok tage den op til revision ved en version 1.1...;-)

Men pt. er jeg nød til at holde fast i min reload af framen ved hvert klik i en af de 2 bokse....

Men jeg vil gå så vidt som at sige, at kommer der ikke en løsning på problemet så vil der falde point\'s af til dig.
Men kan jeg ikke overtale dig til at vente med at poste et svar, så spørgsmålet stadig ser ubesvaret ud ?(for det løser ikke det generelle problem....)

Kasper
Avatar billede kasseper Nybegynder
13. juli 2001 - 12:46 #12
og jeg lukker nok spg. om et par dage....vil jeg tro, hvis ikke der er nye spor..!
Avatar billede kasseper Nybegynder
17. juli 2001 - 13:59 #13
hmmm. der sker ikke så meget på dette område, så jeg bibeholder min nuværende løsning, men switcher måske over til din metode, på et senere tidspunkt.
Du får lidt point til dine skrivekramper.
Så hvis du smider et svar får du 200 er det OK ?
Avatar billede jakoba Nybegynder
17. juli 2001 - 14:21 #14
reglen er 60 for et \"SVÆRT\" spørgsmål, og du har allerede betalt meget mere for svar der ikke duede (også til mig), så bare behold dem.

mvh JakobA
Avatar billede kasseper Nybegynder
17. juli 2001 - 14:27 #15
OK, men inflationen i point\'s antallet har været igang MEGET længe, og jeg havde virkelig håbet på at få løst problemmet.
Jeg syntes også at når man smider 60 point i puljen, er der ikke ret mange der for øje på spørgsmålet, derfor smed jeg en masse point.
Plus at jeg ikke har \'lysten\' til at rykke på highscore listen mere, så jeg kan jo lige så godt bruge lidt. Men Ok, jeg snupper det hele sev om jag syntes at du egentlig havde fortjent lidt, du kom da trods alt op med et ret omfattende løsningsforslag.

Men tak for hjælpen anyway.
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