Avatar billede fidusen Nybegynder
12. august 2000 - 23:14 Der er 9 kommentarer og
1 løsning

SVÆR: Hold en side i sit FRAMESET

Jeg efterlyser et JavaScript, der kan holde en side i et rammesæt.
--
Spørgsmålet er ment sådan her:

1: En søgemaskine finder en af mine undersider (lad os sige kontakt.html)
2: Brugeren åbner siden
3: Siden åbnes uden sit rammesæt

Er der et script til at få siden til at åbnes inde i sit rammesæt (rammer.html*)?

(*) Rammer.html kalder IKKE kontakt.html (men menu.html og forside.html)

--

Jeg har hidtil gået ud fra at dette lille script kunne klare sig:

<SCRIPT language=\"JavaScript\">
<!--
if( top.location == self.location ) {
top.location.href = \'rammer.html\' }
//-->
</SCRIPT>

MEN NEJ....
Dette script gør, at siden rammer.html åbnes, hvis siden (med scriptet) står alene.
Det virker fint nok, hvis det er en af de HTML-dokumenter, som rammesættet kalder (menu.html og forside.html).

F.eks. Hvis man så åbner forsiden alene vil man blive dirigeret om til rammer.html. Rammer.html kalder forsiden og menuen, og alt er godt...

Men hvis man åbner en anden side, lad os sige kontakt.html, der burde placeres på forside.html\'s plads (altså i ramme 2), da vil den igen kalde rammer.html, der så vil åbne menu.html og forside.html.....

Rammesættet (rammer.html) er ikke klar over, at det er kontakt.html, der har kaldt JavaScriptet og er blevet smidt over til rammer.html...

Er der nogen der har en løsning, så ville jeg være dybt taknemmelig.

Jeg er ligeglad hvordan, bare det virker....

Med Venlig Hilsen
Fidusen
Avatar billede phylox2 Nybegynder
12. august 2000 - 23:18 #1
Har du prøvet med

<SCRIPT language=\"JavaScript\">
<!--
if( top.window.location.href == self.location ) {
top.window.location.href = \'rammer.html\' }
//-->
</SCRIPT>

?
Avatar billede erikjacobsen Ekspert
12. august 2000 - 23:22 #2
Jeg tror det er det han har prøvet stort set, phy.
Du, fidus, er det muligt for dig at køre ASP,PHP eller lignende, for så
laver du en rammer.asp i stedet for og kalder den med
\'rammer.asp?page=kontakt.htm\'. Og så genererer den det
rigtige frameset.

Ok, man kan da også gøre det i JavaScript.

Var det noget?
Avatar billede fidusen Nybegynder
12. august 2000 - 23:28 #3
Jeg kender overhoved intet til ASP (endnu :-), så jeg håber, der også er en løsning i JavaScript.
Det lyder ellers ganske simpelt med ASP... mmm...
Men indtil videre må det blive JavaScript...
Avatar billede fidusen Nybegynder
12. august 2000 - 23:30 #4
Kræver det noget af serveren eller webhotellet at bruge ASP?
Avatar billede erikjacobsen Ekspert
12. august 2000 - 23:38 #5
Næh, de fleste kan da klare ASP, men det koster dig typisk lidt mere. Problemet
med JavaScript er at ikke alle browsere kan klare det, og selv Microsoft anbefalede
ovenikøbet engang at man slog det fra. De fleste gør, jo. Men ok, lad os prøve i JavaScript.
Men jeg har ikke tid liiiige nu, så kom nu frem, alle i andre JavaScript-hackere.

Der er dog en løsning helt uden JavaScript, ASP osv, nemlig at du laver en rammefil, for
hver eneste underside, der kan komme på tale, og så kalder den relevante rammfil for hver
underside. Det er sikkert - lidt besværligt - men er det en mulighed ??
Avatar billede fidusen Nybegynder
12. august 2000 - 23:50 #6
Tanken har strejfet mig... Men jeg besluttede mig for at lede spørge her på Eksperten.dk inden jeg kastede mig ud i et alt for stort arbejde....
- FiDuSeN
Avatar billede hatecaps Nybegynder
13. august 2000 - 00:24 #7
Jeg ville bruge document.referrer værdien til i rammer.html at tjekke hvor der blev linket fra. Hvis denne værdi er med i en liste over dine undersider, sættes den anden ramme til at indeholde netop denne underside efter onLoad.
<html>
<head>
<script>
<!--
undersider = new Array(3);
undersider[0] = \'http://www...  o.s.v\';
undersider[1] = \'http://www...  o.s.v\';
undersider[2] = \'http://www...  o.s.v\';
 
function check_ref() {
  tartetfile = \'\';  //tom streng 
  for (i=0;i<3;i++) {
    if (underside[i] == document.referrer) {
        targetfile = underside[i];
        }
  }
  if (targetside != \'\') {  // tom streng
    document.frames[1].location = targetside;
    }
} 
<frameset cols=\"100,*\" onLoad=\"check_ref(); return true\">
<frame src=\"menu.html\">
<frame src=\"forside.html>
</frameset>
</html>
</html>

BEMÆRK:  denne løsning virker af en eller anden grund ikke på min lokale maskine, men den virker fint på min web-server
Avatar billede olebole Juniormester
13. august 2000 - 00:35 #8
<ole>
Med mindre, du er ude i nestede frames - for så er det et meget større puslespil - kan du skrive dette script i alle dine dokumenter - undtaget din \'index.html\' fil, der indeholder frameset\'et:

<script language=\"JavaScript\">
<!--
if (top.location == self.location) {
    loc = self.location+\"\";
    loc = loc.substring(loc.lastIndexOf(\'/\')+1,loc.length);
    top.location.href = \"index.html?\" + loc;
}
// -->
</script>

Derefter skriver du dit frameset ud i \'index.html\' på denne måde:

<html>
<head>
</head>
<script language=\"JavaScript\">
<!--
var frLoc = \"2.html\";
if (document.location. search) {
    frLoc = self.location.search;
    frLoc = frLoc.substring(1,frLoc.length);
}
var astr = \"<frameset rows=\'50,*\'>\";
astr += \"<frame src=\'1.html\'>\";
astr += \"<frame src=\'\" + frLoc + \"\'>\";
astr += \"</frameset>\";

document.write(astr);
// -->
</script>

</html>

/Vh
</bole>
Avatar billede olebole Juniormester
13. august 2000 - 00:40 #9
I din \'1.html\' fil - som f.eks. kunne være en menu og et sidehoved - skal du ike skrive scriptet, men derimod det, du selv nævner i spørgsmålet.
/Vh
Avatar billede fidusen Nybegynder
13. august 2000 - 14:26 #10

Da oleboles var simplest prøvede jeg det først, og det virkede fuldt ud...!

Tusind tak til jeg alle
- FiDuSeN -
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