NIWO - nl.internet.www.ontwerpFAQ

Hoe dwing ik een pagina in een frameset?

Vaak zullen bezoekers een pagina op je site rechtstreeks opvragen, en niet eerst je complete frameset. Dit gebeurt bijvoorbeeld als je pagina via een zoekmachine is gevonden. In dat geval krijgt de bezoeker de andere pagina's van je frameset, bijvoorbeeld het menu, niet te zien.

!

Slechts in een klein aantal situaties is het verstandig gebruik te maken van frames.

Met behulp van JavaScript kun je een pagina 'dwingen' zichzelf in de frameset te laden. Hiertoe wordt op elke te framen pagina een script uitgevoerd dat kijkt of de pagina in een frameset staat, en indien nodig de framesetpagina opvraagt. Het script op de framesetpagina bekijkt welke pagina geframed moet worden: de standaardpagina (indien de framesetpagina rechtstreeks werd opgevraagd), of de pagina die de framesetpagina heeft opgevraagd. De complete frameset wordt vervolgens met JavaScript geschreven.

De pagina met de frameset

Een voorbeeld van een eenvoudige frameset: twee frames, met links het menu en rechts het hoofddeel.

001  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
002  <html>
003  <head>
004  <title>titel</title>
005  </head>
006  <script language="JavaScript" type="text/javascript">
007  var ls = location.search.substr(1);
008  var prik = (ls & (ls.substr(0,4) == "url=")) ?
009          unescape(ls.substr(4)) : "intro.html";
010  var deSet = '<frameset cols="150,*">\n';
011  deSet += ' <frame src="menu.html" name="menu">\n';
012  deSet += ' <frame src="' + prik + '" name="main">\n';
013  deSet += ' <noframes><body>\n';
014  deSet += '  [tekst met o.a. links de diepte in, t.b.v. zoekmachines]\n';
015  deSet += ' <\/body><\/noframes>\n';
016  deSet += '<\/frameset>\n';
017  document.write(deSet);
018  </script>
019  <noscript>
020   [hier de frameset in normale html, voor browsers
021    die JavaScript niet ondersteunen]
022  </noscript>
023  </html>

Vervang "intro.html" door de pagina die getoond moet worden als een bezoeker wél rechtstreeks je frameset opvraagt.

De te framen pagina

In het head-deel van de in te framen pagina's plaats je dit script:

001  <script language="JavaScript" type="text/javascript">
002  if (top == self) {
003    var url = 'frameset.html?url=' + escape(location.pathname +
004          location.search + location.hash );
005    if (document.images) location.replace(url);
006    else location.href = url;
007  }
008  </script>

Vervang "frameset.html" door de naam van de pagina met de frameset.

Als je het niet netjes vindt om bezoekers ongevraagd je frameset voor te schotelen, kun je het bovenstaande script weglaten en een hyperlink plaatsen die de pagina in de frameset laadt. Op de plek waar die link dient te komen plaats je dan dit script:

001  <script language="JavaScript" type="text/javascript">
002  if (top == self) {
003    var url = 'frameset.html?url=' + escape(location.pathname +
004      location.search + location.hash);
005    document.write('<a href="frameset.html?url=' + url +
006      '">toon overige frames<\/a>');
007  }
008  </script>

Meer informatie over 'frameprikken' kun je vinden in dit artikel bij irt.org.
Meer informatie over frames: de frames-FAQ.