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.
