02. marts 2006 - 12:48Der er
78 kommentarer og 1 løsning
Check frames
Det her spørgsmål er sikkert stillet 1000 gange, men kan ikke lige komme på hvad søgeordene skulle være. Jeg har nogle sider der bliver loadet i en iframe. Jeg vil gerne sikre mig, at siderne ikke kan åbnes alene. Dvs hvis det er 'menu.php' der er placeret i iframe i 'index.php', og 'menu.php' åbnes for sig selv, skal den checke om den er en del af 'index.php' iframen, og hvis ikke, så loader den 'index.php'.
Lige et tillægsspørgsmål. Hvis nu jeg har åbnet 'shop.php' alene, den checker om den er i iframe, det er den ikke, og loader 'index.php'. Men da 'index.php' jo har 'menu.php' som standard, kommer man jo væk fra 'shop.php'. Jeg har set på forskellige hjemmesider, de bruger en kode i adresselinjen, f.eks www.lllll.com/index.php?page='shop.php'. Sådan vil jeg gerne have det, så når man skriver ovenstående, loades 'shop.php' ind i iframen på 'index.php'. Men hvordan gør jeg det?
Men problemet er, det er en musik-hjemmeside, med omkring 30 bands, og hvert band har sin egen folder. Kan jeg bare kopiere .htaccess til alle folderne?
Ja, det med .htaccess kan du ikke bruge når det er iframe, jeg læste ikke lige spørgsmålet ordentligt... Tænkte på at du includede dine filer vha. php funktionen include();
Og siden ser ud som fra start. Jeg poster lige den rettede kode:
<script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
Ændret '.dk' til '.com' og rettet 3 til 4, +retter index.html til min index-side. Det øverste script er sat ind i <head> af index3.php, det nederste i <head> af index.php i highvoltage folderen. Er der noget jeg har overset?
Fejlen jeg gjorde før, var at sætte onLoad(LoadSource()); ind i <body> på index3.php. Da jeg satte den ind under <iframe> virkede det. Men desværre med en sideeffekt. Nu genloader den konstant siden inde i iframen. Ideer?
Sæt den tilbage i body, og brug denne kode, har rettet lidt:
<script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
<script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
<script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
Ja det var faktisk rart for mig. Du har sat koderne ind de forkerte steder...
Dette skal stå i din index3.php som det allerede gør: <script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
Dette skal stå i alle de filer der bruges i iframen, og altså ikke i index3.php <script language="javascript" type="text/javascript"> var expathname = escape(location.pathname); expathname = expathname.replace("/public", ""); if(top.location==window.location){top.location.replace(top.location.href.substring(0,top.location.href.indexOf(".com/public/")+11)+"/index3.php?page="+expathname);} </script>
Prøv bare at fjerne onload og dette fra din index3.php:
<script language="javascript" type="text/javascript"> function loadSource(){ if (location.search!=""){ src=unescape(location.search.substring(1)); top.frames['main'].location.href=src; <----mit iframe hedder main }} </script>
(kan godt ske det kun virker ved include $page)... ... Hvis det ikke virker så prøv:
Indsæt i starten af index.php filen (php filen der kalder framen) $_SESSION[godkendframe]="ok";
Indsæt i bunden af index.php filen (php filen der kalder framen) $_SESSION[godkendframe]="falsk";
I den kaldte php fil: session_start(); if((!isset($_SESSION[godkendframe]))||($_SESSION[godkendframe]!="ok")) {header("Location:http://www.bla_bla-bla.xyz/?page=".$PHP_SELF);exit;}
Det hjælper ikke mclemens, for $_SESSION kan tilgås overalt fra siden, og dermed vil man kunne komme ind på underlinks, ved bare at have været inde på hovedsiden 1 gang i browservinduet.
I den kaldte php fil: session_start(); if((!isset($_SESSION[godkendframe]))||($_SESSION[godkendframe]!="ok")) {header("Location:http://www.bla_bla-bla.xyz/?page=".$PHP_SELF);exit;}
og i bunden af den kaldte php fil $_SESSION[godkendframe]="falsk";
(satte denne kode tilbage i /highvoltage/index.php <script language="javascript" type="text/javascript"> var expathname = escape(location.pathname); expathname = expathname.replace("/public", ""); if(top.location==window.location){top.location.replace(top.location.href.substring(0,top.location.href.indexOf(".com/public/")+11)+"/index3.php?page="+expathname);} </script>
Men ikke den øverste ind i index3.php, skulle jeg det?)
Nej, men jeg tror du har skrevet noget forkert, for den giver ingen side i iframen, hvilket jeg har sat den til uanset hvad, prøv lige direkte at kopiere koden herind..
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.