webForumDet fria alternativet

Tvinga in i frameset

17 svar · 1 587 visningar · startad av joppedi

joppediMedlem sedan jan. 200032 inlägg
#1

Hej
Jag har motsatt behov till "Bryt ut ur frames":
om jag befinner mig utanför framesetet och vill länka till
en undersida inuti framesetet (men som alltså inte anges
som src i nån frame) - hur gör jag då?

Har sökt svar på eforum utan resultat http://eforum.idg.se/viewmsg.asp?EntriesId=62778
liksom några andra personer: http://eforum.idg.se/viewmsg.asp?EntriesId=63469 (Matti K) http://eforum.idg.se/viewmsg.asp?EntriesId=101819 (Mange71)

Är det CGI som gäller?
Eller kan JS hålla ordning på document, frames & window på nåt sätt?
Nån som vet?
/Joppe

FlashXMedlem sedan nov. 1999992 inlägg
#2

Så många ställen utan ett svar :q

Detta skriptet hjälpte Omid mig en gång i tiden och vi ska se om vi kan reda ut detta.

Tag koden nedanför och skapa ett HTML-doument med namnet framepage.htm

<html>
<head>
<title>Min hemsida</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<SCRIPT LANGUAGE="JavaScript">
<!-- Script from www.JavaScript.nu
sida=location.search;
sida=sida.substring(1,sida.length);
sida=unescape(sida);
document.write("<FRAMESET ROWS=\"91%,9%\" BORDER=\"0\">");
document.write("<FRAME NAME=\"mainpage\" SRC=\""+sida+"\" SCROLLING=\"AUTO\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"NO\">");
document.write("<FRAME NAME=\"navigering\" SRC=\"http://www.din_doman.se/navigering.htm\" SCROLLING=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"NO\" noresize>");
document.write("</FRAMESET>");
//-->
</SCRIPT>
</head>

<body bgcolor="#FFFFFF">

</body>
</html>

I JavaScriptet ändrar du naturligtvis storleken på de båda ramarna som här var 91% resp. 9%
Namnen på ramarna likaså, mainpage (den stora) och navigering (den lilla) och till sist sökvägen till sidan som man inte länkar till (normalt är att du har dina knappar på den sidan)

På alla sidor som sedan ska hoppa in i ramen måste du lägga till ett JavaScript i HEAD-taggen.

<SCRIPT LANGUAGE="JavaScript">
<!--
if (top.location==self.location)
{
top.location="http://www.din_doman.se/framepage.htm"+"?"+escape(top.location.href);
}
//-->
</SCRIPT>

Som du ser så letar den upp sidan framepage.htm (om du nu döpte den så) och infogar då sidan i (detta fallet) den övre ramen.
Den undre ramen har ju redan sökvägen till sidan med knapparna.

För att göra det lite smidigare ifall du vill ändra sökvägen någon gång, så kan du istället lägga skriptet i en JS-fil.
På så sätt behöver du inte gå igenom alla sidorna om du behöver ändra något.

Skapa en textfil som t.ex heter gotoframe.js och infoga texten

if (top.location==self.location)
{
top.location="http://www.din_doman.se/framepage.htm"+"?"+escape(top.location.href);
}

och sedan infogar du istället

<SCRIPT LANGUAGE=JavaScript SRC="js/gotoframes.js">
</SCRIPT>

på alla dina sidor.
SRC= ändrar du till din sökväg till JS-filen.
Vill du ändra något i skriptet så räcker det alltså med att ändra i själva JS-filen.

That's it :)

Observera
Sidan framepage.htm ska inte ersätta din ordinarie framesida utan ska laddas upp som ett komplement till ditt ordinarie frameset.

[Redigerat av FlashX den 17 jan 2000]

SuneMedlem sedan nov. 1999242 inlägg
#3

Det går att göra betydligt enklare. Gör en JS-fil som du döper till t ex redirect.js och som innehåller följande:

if(self==top)
location.href="URL till framesdokumentet";

URLen ändrar du till den HTML-fil som är själva frames-filen.

Sen lägger du in följande i alla <HEAD>s på de filer som du inte vill ska hamna utanför framen:

<SCRIPT LANGUAGE=JavaScript SRC="URL till redirect.js"></SCRIPT>

URLen ändrar du till JS-filen var den nu än må ligga.

Sen trillar man för alltid tillbaka in i framen men dock alltid till själva förstasidan på din webbplats.

Fast nu efteråt kom jag på att det kanske var hur man tvingar en sida som inte "vill" bli inlagd in i en frame att så bli trots allt... :q

M v h
Sune

MattiMedlem sedan dec. 19993 781 inlägg
#4

min fråga har varit på eforum.idg i evigheter.. Här frågar nån samma sak och får svar på några timmar =) Perfekt ;)

------------------
:: matti
:: www.mk.st

FlashXMedlem sedan nov. 1999992 inlägg
#5

Joppe,
Du ska inte använda Sunes skript då den inte fungerar så som du tänkt.

Den översta varianten öppnar alltid samma dokument som den man hade i webbläsaren från början, men lägger till din sida som du använder för exempelvis navigeringen.

Den stora fördelen med detta är att du nu kan skicka en länk till någon från vilken sida du vill, men ändå få den i dina frames.
Ett exempel på hur det fungerar kan du se här

Sunes variant blir ju mer eller mindre en vanlig redirect till en helt annan sida.

[Redigerat av FlashX den 07 feb 2000]

FlashXMedlem sedan nov. 1999992 inlägg
#6

hmm.. nu menade jag naturligtvis inte att Sunes idé på något sätt var helt värdelös, men jag läste en av Joppes länkar innan jag svarde och då fungerar ju inte Sunes variant så bra i just detta fallet.

[Redigerat av FlashX den 15 jan 2000]

joppediMedlem sedan jan. 200032 inlägg
#7

iff-piff-pussi-lull!!!
Javisst. Har testat i all hast och det verkar funka som jag ville.
Underbart. Webforum i sitt esse, va? Frågar mitt i natten o kl 03
är det klart.
Jag kollar att Mange71 på eforum hittar hit.
Själv hann jag med barnens första pyjamasparty under helgen.
Ryska posten lever än! De var lika lyckliga som jag nu,
med ett script som funkar. Jisses, tiden går...

------------------
Joppe

joppediMedlem sedan jan. 200032 inlägg
#8

ja, det var alltså blixten Kjells lösning som hittade rätt.
Men, tack Sune för omtanken ;)

------------------
Joppe

joppediMedlem sedan jan. 200032 inlägg
#9

Browsertest:
NS Communicator 4.6 eng - ok
NS Navigator 3.01 sv - ok
IE 5.0 sv - ok
IE 4.0 sv - ok...

I testet körde jag hemma på PC med relativa sökvägar.

OBS! IE 4.0 var jag tvungen att köra genom Personal Web Server för att det
skulle funka. Felet annars blev att 'mainpage'-framen förblev tomt.
(Framesetet ritades upp och övriga frames fylldes med sina sidor - navigation t ex)
Hmm...

Övrigt (för att löpa linan ut):
finns det inget sätt att öppna det riktiga framesetet o lägga in sidan där?
Nackdelen med FlashX;s lösning är ju att besökaren befinner sig i ett
tomt frameset, så ev senare bokmärkning av annan sida blir fel och
orienteringen kan bli förvirrande för dem.
Jag tänker mig nåt script med fler funktioner:
"öppna frameset.htm i detta fönster OCH öppna main.htm i framen 'main' i frameset.htm"
Ja, ni förstår?

------------------
Joppe

FlashXMedlem sedan nov. 1999992 inlägg
#10

Det går utmärkt för besökaren att bokmärka sidan. Den blir inte tom.
Sätt ett bra namn på titeln för frampage-sidan och adressen som blir i adressfältet är inte till något bekymmer.
All navigering ska fungera ändå.

joppediMedlem sedan jan. 200032 inlägg
#11

Jo...
1. framen 'mainpage' är tom (off-line i NS visar den katalogen trots
att det ligger en index-fil där).
2. Om denna url börjar valsa runt så har man administrativa bekymmer.
3. Därtill detta att det kan mycket väl vara förvirrande för besökaren
om var hon befinner sig på sajten.

Detta är nackdelarna med din lösning - fördelarna överväger...
besökaren kommer lättare fram till önskad undersida.

------------------
Joppe

FlashXMedlem sedan nov. 1999992 inlägg
#12

hmm... du kan inte ha gjort så som jag har gjort på min sida.
URL'n "valsar" aldrig runt.
Den är ju dynamisk och existerar endast i det ögonblick som JavaScriptet ropar in den.
Rent administrativt så ska du aldrig bekymmra dig om denna.
Adressen är heller inget problem, då den aldrig kan bli registrerad av en sökmotor och besökarna blir inte mer förvillade än den adress som ett "vanligt" frameset uppvisar.
Där ser du ju inte heller vilken sida du befinner dig på.

Nu är det ju möjligt att du har konfigurerat ditt på ett eget sätt, men i mitt fall så behöver jag aldrig fundera på sidan frampage.htm
Jag har använt den i snart ett år utan något som helst krångel.
Dom gånger den används så fungerar den precis likadant som mitt ordinarie frameset och när besökaren surfat färdigt, så existerar den inte längre.

Har du en länk man kan få titta på?

Tillägg:
ahh... efter att ha funderat över dina problem så kom jag på att du kanske bytt ut din ordinare framesida mot denna?
Det ska du inte göra.
Denna skapar du så att säga "vid sidan om" och sen använder du aldrig den utan du kör den du hade förut, precis som vanligt.
Den nya finns ju bara som "reserv" när någon länkar till dina undersidor.

[Redigerat av FlashX den 17 jan 2000]

joppediMedlem sedan jan. 200032 inlägg
#13

Det viktiga i det du skrev är din erfarenhet:
"använt den i snart ett år utan något som helst krångel".
Bra, jag förlitar mig på dig.

Ang ditt tillägg:
lugn, jag har inte ersatt det dynamiska framesetet med den ordinarie.

Jag skickar in url när vi stökat färdigt o redo för respons!

Det där om att "förvirra" besökaren:
om hon är van med att besöka 'www.sajten.nu/index.html' och trillar in dit
från den dynamiska länken har hon istället
'www.sajten.nu/dynamisktframeset.htm' (t ex) i sin adressrad.
Då kan frågan smyga sig på "Är jag på samma sida som vanligt? Är jag på en annan nivå?".
Men jag oroar mig nog i onödan - din erfarenhet!

emissionMedlem sedan dec. 19996 095 inlägg
#14

Jo...
1. framen 'mainpage' är tom (off-line i NS visar den katalogen trots
att det ligger en index-fil där).

Det gör NS rätt i. Det finns ingen funktion som säger att en index-fil automatiskt ska läsas in.

------------------
----------------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB
Norrköping

SuneMedlem sedan nov. 1999242 inlägg
#15

Tjena Kjell!
Jag har tagit en titt på ditt script som kastar tillbaka folk i frames om de hamnat på en sida som ska ingå i framesstrukturen. Och jag får det inte att fungera som du har beskrivit, jag måste ha missat något... Det som felar är att om jag t ex kommer in på sidan 2 så hamnar jag inte tillbaka i framesetet med sidan 2 i main-framen.

Tar det från början.

  • Har gjort en vanlig framessida kallad index.html (sidorna i framesen heter menu.html, sid1.html, sid2.html, sid3.html)

  • Gjorde sedan en framessida skriven i JavaScript (index2.html) typ nedanstående kod:

    <html>
    <head>
    <title>Tillbaka in i frames</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <SCRIPT LANGUAGE="JavaScript">
    <!-- Script from [url="http://www.JavaScript.nu"]www.JavaScript.nu[/url] 
    sida=location.search;
    sida=sida.substring(1,sida.length);
    sida=unescape(sida);
    document.write("<frameset cols=\"30%,70%\" border=\"0\" framespacing=\"0\" frameborder=\"NO\">");
    document.write("<frame src=\"menu.html\" name=\"menu\" noresize>");
    document.write("<frame src=\""+sida+"\" name=\"main\" noresize>");
    document.write("</frameset>");
    document.write("<noframes>");
    document.write("<body>");
    document.write("<h3>Denna sida har du ingen behållning av om du använder en bläddrare som inte stödjer Frames.</h3>");
    document.write("</body>");
    document.write("</noframes>");
    //-->
    </SCRIPT>
    </head>
    <body bgcolor="#cccc99">
    <h3>Denna sida har du ingen behållning av om du använder en bläddrare som inte stödjer Frames.</h3></body>
    </html>
    
  • Skapade sedan en JavaScript-fil kallad back2frms.js som ser ut så här:

    if (top.location==self.location)
    {
    top.location="index.html"+"?"+escape(top.location.href);
    }
    
  • Därefter la jag in en länkning på alla sidor som ska finnas i framsetet, dvs menu.html, sid1.html, sid2.html, sid3.html. Länken ser ut så här:

    <script language="JavaScript" src="back2frms.js"></script>
    
  • Alla filer ligger i samma mapp så länkarna skall vara rätt.

Likväl poppar sidan ett upp varje gång framsetet laddar tillbaka in i frames... :q Det är precis likadant som i mitt script, men vad jag kan första så ska det inte vara så... vad har jag gjort för fel?

Tacksam för all hjälp jag kan få!
Sune

Det känns lite onödigt att skriva all kod typ ovanstående om det fungerar lika bra så här:

  • Gör en JavaScriptfil - kalla den back2frmsB.js - som ser ut så här:

    if(self==top)
    location.href="index.html";
    

    OBS! index.html är namnet på frames-filen som du ska ange rätt URL till...

  • Gör en länk till scriptet på alla sidor som finns i framesetet som ser ut så här:

    <script language="JavaScript" src="back2frms.js"></script>
    
  • Klart. Och det fungerar exakt likadant vad jag kan se... och man behöver inte göra JavaScript-framesetet.

M v h
Sune

[Redigerat av Sune den 07 feb 2000]

FlashXMedlem sedan nov. 1999992 inlägg
#16

if (top.location==self.location)
{
top.location="index.html"+"?"+escape(top.location.href);
}

borde nog vara
if (top.location==self.location)
{
top.location="index2.html"+"?"+escape(top.location.href);
}
annars öppnar du ju bara ditt vanliga frameset där du redan från början angivit vilka dokument som ska öppnas.

SuneMedlem sedan nov. 1999242 inlägg
#17

Tackar mjukost!
Nu fungerar det som det ska!
Nu finns här två alldeles utmärkta script för detta "stora" problem. Ett om man vill att sidan man sökt upp ska hamna på rätt plats (dvs synlig direkt) inute framesetet - back2frms 1 och ett som för en till startsidan om man hellre vill att läsaren ska börja där - back2frms 2. Nu gäller det bara att veta vilket som passar bäst för tillfället! :e

Stort tack
Sune

joppediMedlem sedan jan. 200032 inlägg
#18

Ny variant på lösning funnen på http://www.echoecho.com/jsframes.htm

Undersidan:
<HEAD>
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var correct_frame = 0 + (parent.nav ? 1 : 0);
if (self == top | | !correct_frame)
top.location.href = 'framespage.htm?subpage.htm';
//-->
</SCRIPT>
</HEAD>

Framesetet:
<SCRIPT LANGUAGE="JavaScript">
<!--
var correct_frame = true;
document.write('<FRAMESET COLS="50%,50%">');
document.write('<FRAME SRC="navpage.htm" NAME="nav">');
document.write('<FRAME SRC="',(location.search ?
location.search.substring(1):"defaultsub.htm"),'""
NAME="display">');
document.write('<\/FRAMESET>');
//-->
</SCRIPT>

Är det en krångligare lösning med samma resultat?
Poängen här är väl substringen "framespage.htm?subpage.htm" kombinerat med
"location.search.substring(1):'defaultsub.htm'"
som stoppar in ordinarie sida i ramen om det inte är subsidans script som kommer farande in i framesetet.

Om inget är vunnet med detta script är Kjells renare.
Nån som ser klart?

Genererad på 388 ms · cache AV · v20260730165559-full.f96bc7eb