
Här är HTML-koden för frames:
Först talar man om hur många frames man vill ha. Det definieras i <frameset...>-koden.
Genom att skriva rows kommer läsaren att dela upp ytan i rader. Man kan skapa kolumner i stället genom
att skriva cols i stället för rows. Det går att använda flera
<frameset...>-koder också. Här är ett exempel från Netscape:
Detta skapar två kolumner och den andra kolumnen delas upp i tre lika stora delar. 50%,50% i första
<frameset>-koden talar om för läsaren hur stora fönstren ska vara.
Jag tycker att grunderna för frames är lätta att förstå. Ta nu en titt på vårt nästa exempel:
Detta kommer att öppna ett skärmfönster där man kan klicka på lite knappar i det ena fönstret och
därigenom skriva något i det andra fönstret.
För att skapa frame-sidan behöver man (frames.htm):
Här är koden för frame1.htm:
And now frame2.htm:
Wow! Dokumenten blir längre och längre! Vad händer här? Användaren öppnar den första filen
(frames.htm). Detta skapar frame-sidan och öppnar frame1.htm i första fönstret (döpt till 'fr1') och
frame2.htm i det andra fönstret (döpt till 'fr2'). Så långt är det vanlig HTML. Som du ser innehåller
frame1.htm några JavaScript-funktioner, men de anropas inte i det dokumentet. Behövs då inte
funktionerna? Är jag bara för lat för att radera dem? Även om jag är en lat typ behövs funktionerna
faktiskt. De anropas av det andra dokumentet, frame2.htm! Vi skapar några knappar i det andra
dokumentet på samma sätt som vi gjorde i del 1 av den här introduktionen. Egenskapen onClick är
också bekant, men vad betyder parent.fr1...?
Om du är bekant med objekt är detta ingen nyhet för dig. Som du såg anropas frame1.htm och
frame2.htm av filen frames.htm. Dokumentet frames.htm kallas för förälder (parent) till de två fönstren.
Alltså kallas de två fönstren för barn (child) till dokumentet frames.htm. Man kan se det som en
hierarki som ger ett visst inbördes förhållande mellan de olika fönstren. Jag ska försöka förklara tanken
med hjälp av lite 'grafik' (ASCII-konst är en bättre beskrivning...):
Detta kan naturligtvis utökas. Man kan skapa några 'barnbarn' (grandchildren) (om du vill kalla det för det.
Det är inte det officiella uttrycket!). Så här ser det ut:
Om du vill anropa någonting i föräldrafönstret, från frame2.htm, sätter du helt enkelt parent.
före funktionen du anropar. Det går att anropa funktionerna vi definierade i frame1.htm från föräldra-dokumentet
genom att sätta fr1 före funktions-anropet. Varför fr1? I koden till föräldra-dokumentet (frames.htm)
skapade du flera fönster och döpte dem. Jag valde fr1 för det första fönstret. Nästa steg är enkelt.
Hur anropar man det första fönstret från frame2.htm (som ligger i det andra fönstret, kallat fr2)? Som
du kan se i min fantastiska grafik finns det inte någon direkt relation mellan frame1.htm och frame2.htm. Man
kan inte direkt anropa funktioner från frame2.htm som har definierats i frame1.htm. Man måste anropa den via
föräldra-dokumentet. Alltså parent.fr1. Om du vill anropa funktionen hi() från frame2.htm skriver du parent.fr1.hi().
Det är det som sker i det andra dokumentet i egenskapen onClick.
Om du har en sida med frames och någon klickar på en länk kommer frame-sidan att vara kvar. Det är ok om användaren
stannar på din sida. Du kan skapa ett verktygsfält som visas i ett fönster hela tiden, men om användaren hoppar till en
annan del av Internet ska kanske inte verktygsfältet vara kvar. Hur tar man bort de frames man en gång skapat?
Lägg bara till TARGET="_top" i <a href...>-koden. Det ser ut så här:
Du måste förstås lägga till TARGET="_top" i alla länkar som leder utanför din sida. Om alla länkar på din sida
leder 'ut' kan du också skriva <base target="_top">
i huvudet på din HTML-sida. Det betyder att alla länkar tar bort frame-sidan.
Översatt till svenska av Niklas Johansson 1996
Många har frågat hur JavaScript och frames fungerar ihop. För att använda frames tillsammans med JavaScript
måste man ha Netscape Navigator 2.0. Det finns några läsare som stöder frames nu, men de stöder vanligtvis
inte JavaScript. Jag tror inte att det dröjer länge innan det finns fler läsare som stöder både frames och JavaScript.
Först ska jag tala lite om frames. Många HTML-dokumentationer innehåller ingen information om frames därför
att frames är så nytt. Med frames kan man 'dela' skärmen i flera fönster och visa olika HTML-dokument i de
olika fönstren. En trevlig sak är att fönstren kan samverka. Det betyder att de kan utbyta information med
varandra. Du kan till exempel skapa ett dokument med 2 fönster. Ett med din vanliga HTML-sida och ett med ett
verktygsfält. Verktygsfältet kan innehålla knappar för att hoppa i din vanliga HTML-sida. Verktygsfältet kommer
alltid att vara synligt. Även när ett annat HTML-dokument öppnas i det andra fönstret. Jag ska börja med att
visa hur det här ser ut. Tryck på knappen så får du se hur frames ser ut. (Om du tittar på den här sidan online tar
det ett ögonblick när du trycker på knapparna, i den här delen av kursen, eftersom scripten ska läsas från servern)
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frtest1.htm" name="fr1">
<FRAME SRC="frtest2.htm" name="fr2">
</FRAMESET>
</HTML>
<FRAMESET COLS="50%,50%">
<FRAMESET ROWS="50%,50%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
<FRAMESET ROWS="33%,33%,33%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
</FRAMESET>
Man kan döpa fönstren. Detta är viktigt om man ska använda JavaScript. I det första exemplet ovan kan du
se hur man döper fönstren. I <frame>-koden talar man om vilken HTML-sida som ska öppnas.
Här är koden:
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frame1.htm" name="fr1" noresize>
<FRAME SRC="frame2.htm" name="fr2">
</FRAMESET>
</HTML>
<HTML>
<HEAD>
<script language="JavaScript">
<!-- Hiding
function hi() {
document.write("Hi!<br>");
}
function yo() {
document.write("Yo!<br>");
}
function bla() {
document.write("bla bla bla<br>");
}
// -->
</script>
</HEAD>
<BODY>
This is our first frame!
</BODY>
</HTML>
<HTML>
<body>
This is our second frame!
<p>
<FORM NAME="buttonbar">
<INPUT TYPE="button" VALUE="Hi" onClick="parent.fr1.hi()">
<INPUT TYPE="button" VALUE="Yo" onClick="parent.fr1.yo()">
<INPUT TYPE="button" VALUE="Bla" onCLick="parent.fr1.bla()">
</FORM>
</BODY>
</HTML>
frames.htm parent
/ \
/ \
/ \
fr1(frame1.htm) fr2(frame2.htm) children
frames.htm parent
/ \
/ \
/ \
fr1(frame1.htm) fr2(frame2.htm) children
/ \
/ \
/ \
gchild1 gchild2 'grandchildren'
<a href="goaway.html" TARGET="_top">if you don't want to stare at my page anymore</a>
Senast ändrad 11 maj 1996
© 1996 Stefan Koch