Avatar billede Slettet bruger
05. oktober 2008 - 08:58 Der er 28 kommentarer og
1 løsning

Hvordan starter jeg script (fra en newbie)

Jeg har lagt nedenstående script i HEAD, men skal der ikke også være en stump script i BODY, som kalder det, og hvordan skal det se ud?
Mvh
Avatar billede Slettet bruger
05. oktober 2008 - 08:58 #1
Sorry, her kommer det

<script>
function detect()
{
framesetpage="frames.htm";
thispage=window.location.href;
if (thispage.indexOf('://')<0) {thispage="://"+thispage;};
prefix=thispage.substring(0,thispage.lastIndexOf('://'));
suffix=thispage.substring(thispage.lastIndexOf('://')+3,thispage.length);
// alert('the subpage is:['+prefix+']['+suffix+']');
if (parent.location.href==window.location.href) {parent.location.href=framesetpage+"?"+prefix+"&&&"+suffix};
}
</script>
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 09:36 #2
Du kan i realiteten bare indsætte ``<script type="text/javascript"> detect(); </script>´´ i body-tagget, og funktionen vil så blive kaldt. Men om det er det der skal bruges, kommer lidt an på sammenhængen funktionen skal bruges i...
Hvis det f.eks. er noget der skal kaldes lige så snart siden er loaded, er en måde at kalde det på,
hvis det skal kaldes når der klikkes på en knap, er der en anden metode. Så det ville være rart, hvis du lige fortalte hvordan koden skal bruges.

Ydermere, bør dit script-tag se således ud : <script type="text/javascript"></script>
Avatar billede ngr Praktikant
05. oktober 2008 - 09:42 #3
Jeg har et site med frames, og hvis nogen kommer uden om den side, som styrer frames - altså fx i stedet kommer ind på en af indholdssiderne - så skal scriptet (som ligger på alle indholdssider) sørge for, at den pågældende indholdsside bliver vist i sin kontekst, altså sammen med de andre frames.
Avatar billede ngr Praktikant
05. oktober 2008 - 09:42 #4
Så derfor skal scriptet starte af sig selv
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 10:04 #5
Så kan du gøre følgende:

<script type="text/javascript">

***din detect funktion***

window.onload = function () { detect(); }

</script>

Det vil kalde detect-funktionen lige så snart siden er blevet loaded.
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 10:05 #6
Det skal selvfølgelig bare indsætte i headeren...
Avatar billede Slettet bruger
05. oktober 2008 - 12:56 #7
Husk nu, at jeg er newbie  :-)
Skal der stå sådan i header:

<script>
function detect()
{
framesetpage="frames.htm";
thispage=window.location.href;
if (thispage.indexOf('://')<0) {thispage="://"+thispage;};
prefix=thispage.substring(0,thispage.lastIndexOf('://'));
suffix=thispage.substring(thispage.lastIndexOf('://')+3,thispage.length);
// alert('the subpage is:['+prefix+']['+suffix+']');
if (parent.location.href==window.location.href) {parent.location.href=framesetpage+"?"+prefix+"&&&"+suffix};
}
</script>


<script type="text/javascript">
function detect();
window.onload = function () { detect(); }
</script>
Avatar billede Slettet bruger
05. oktober 2008 - 13:04 #8
Det virker ikke, hvis det står sådan
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 13:22 #9
Sådan her:)

<script type="text/javascript">
function detect()
{
framesetpage="frames.htm";
thispage=window.location.href;
if (thispage.indexOf('://')<0) {thispage="://"+thispage;};
prefix=thispage.substring(0,thispage.lastIndexOf('://'));
suffix=thispage.substring(thispage.lastIndexOf('://')+3,thispage.length);
// alert('the subpage is:['+prefix+']['+suffix+']');
if (parent.location.href==window.location.href) {parent.location.href=framesetpage+"?"+prefix+"&&&"+suffix};
}

window.onload = function () { detect(); }
</script>
Avatar billede Slettet bruger
05. oktober 2008 - 16:04 #10
Sådan, 1000 tak!
Vil du give mig et svar til points
Mvh
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 16:12 #11
Godt at det virker:)
Avatar billede Slettet bruger
05. oktober 2008 - 16:43 #12
Ja, ikke helst som jeg havde regnet med:
Jeg troede, at det ville vise den pågældende side i den rette kontekst, men i stedet kalder det blot 'parent' filen, som så viser konteksten, men med startsiden og ikke den pågældende side.
Men det er fint til at leve med.
Så tak igen.
Avatar billede Slettet bruger
05. oktober 2008 - 16:44 #13
Men jeg fik ikke et svar til points
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 16:53 #14
Her er svaret;)

Nu ved jeg ikke hvor du har det der script fra, eller om du selv har lavet det, men hvis du vil have den til at "rette siderne" så den viser den pågældende side i den rette kontekst, er jeg sikker på vi godt kan finde ud af noget... Men det er selvfølgelig op til dig, om du bare vil leve med nuværende resultat eller hvordan.
Avatar billede Slettet bruger
05. oktober 2008 - 17:02 #15
Kan ikke huske, hvor jeg har fundet det - flere år siden.
Men mon ikke løsningen er, at jeg skal lave en parentfil for hver indholdsfil, for man kan vel ikke 'styre' parentfilen ude fra.
Men det er helt fint som det virker nu.
Mvh
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 17:08 #16
Nej, det kan, ret nemt, fikses ved at når "detect"-funktionen sender brugeren til den rigtige side, så sendes der et GET-request med a la '?frame=1&page=side2.htm' og ud fra det kan parentfilen så læse at det ikke er default-siden der skal åbnes i frame #1, men derimod side2.htm...
Der er selvfølgelig mange måder at gøre det på. Det var bare én.
Avatar billede Slettet bruger
05. oktober 2008 - 17:12 #17
Hvis det er nemt, så vil jeg da gerne have det
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 18:08 #18
Har lige fikset noget kode sammen som sku virke - det er overhovedet ikke gennemtestet, dog.
Først og fremmest, kunne jeg ikke se meningen i "detect"-funktionen, så jeg skrev den om. Og så har jeg lavet 2 nye funktioner som skal indsættes i frames.htm's header.

Den nye "detect"-funktion som skal erstatte den gamle:

function detect() {
framesetpage = "frames.htm"; // the parent file
subpage=window.location.href;
if (top.location.href==window.location.href) {parent.location.href=framesetpage+"?page="+subpage};
}
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 18:11 #19
Og her er det kode du skal indsætte i headeren på frames.htm.
Du skal forresten huske at ændre værdien på "frameID"-variablen til det id din frame/iframe faktisk har, og ikke `iframeOne` som jeg bare har skrevet...


<script type="text/javascript">
function getURLVar(urlVarName) {
// divide the URL in half at the '?'
var urlHalves = String(document.location).split('?');
var urlVarValue = '';
if(urlHalves[1]){
//load all the name/value pairs into an array
var urlVars = urlHalves[1].split('&');
// loop over the list, and find the specified url variable
for(i=0; i<=(urlVars.length); i++){
if(urlVars[i]){
// load the name/value pair into an array
var urlVarPair = urlVars[i].split('=');
if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
// i found a variable that matches, load it's value into the return variable
urlVarValue = urlVarPair[1];
}
}
}
}
return urlVarValue; 
}

function checkFrameDes() {
var frameID = "iframeOne" // the ID of the frame/iframe you want to manipulate
var pageVar = getURLVar("page");
if(pageVar != "") {
document.getElementById(frameID).src = pageVar;
}
}
window.onload = function () { checkFrameDes(); }
</script>

Jeg håber du kan bruge det;)
Avatar billede chrisbookwood Nybegynder
05. oktober 2008 - 20:33 #20
detect -funktionen bør se ud således:

function detect() {
var framesetpage = "frames.htm"; // the parent file
var subpage=window.location.href;
if (top.location.href == window.location.href) parent.location.href = framesetpage+"?page="+subpage;
}
Avatar billede Slettet bruger
05. oktober 2008 - 20:57 #21
Super, jeg har ikke mere tid i aften, men kigger på det i morgen.
Avatar billede roenving Novice
06. oktober 2008 - 16:31 #22
-- og du kan se en måde at styre det på her:

http://roenving.users.whitehat.dk/WD5Opacity.html

Bemærk ændringen i adresselinjen og se kode/forklaring ved at klikke på teksten om framing nede til venstre !-)
Avatar billede chrisbookwood Nybegynder
08. oktober 2008 - 19:22 #23
Næ, faktisk bør den så således ud:

function detect() {
var framesetpage = "frames.htm"; // the parent file
var subpage=window.location.href; // the page opened in the iframe/frame
if (top.location.href == window.location.href) top.location.href = framesetpage+"?page="+subpage;
}
Avatar billede roenving Novice
08. oktober 2008 - 23:37 #24
-- og der mangler vist noget escaping ...
Avatar billede chrisbookwood Nybegynder
09. oktober 2008 - 06:16 #25
Noget escaping?
Avatar billede Slettet bruger
09. oktober 2008 - 08:14 #26
Jeg venter bare på, at de kloge bliver enige  :-)
Avatar billede roenving Novice
09. oktober 2008 - 09:01 #27
Du må ikke i en url skrive f.eks. http:// andre steder end i starten, så en anden udave skal nødvendigvis escapes, f.eks.

var subpage = encodeURI(window.location.href);
Avatar billede roenving Novice
09. oktober 2008 - 09:01 #28
Ups, nok nærmere:

var subpage = encodeURIComponent(window.location.href);
Avatar billede chrisbookwood Nybegynder
09. oktober 2008 - 12:21 #29
ah ja, det er selvfølgelig rigtigt:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester