Avatar billede loopstudio Nybegynder
01. oktober 2003 - 21:41 Der er 9 kommentarer og
1 løsning

javaScript på tværs af FRAMES

Hejsa, Jeg har nedenstående kode, som består af nogle frames, bl.a. en menu-frame og en indholds-frame.
Nede i "indhold"-framen vil jeg gerne kunne kalde en overordnet javaScript function, som skal kunne ses & kaldes af alle programmer der måtte vises i indholdsframen.
MEN mit problem består i at jeg ikke engang kan se navnene på nogle af de objekter jeg har i det her program.
Jeg har prøvet i mit program "indhold.asp" nogle alert-bokse på onLoad() funktionen. F.eks.: alert(parent.name), alert(document.name) samt en alert(top.name). Enten så viser disse INGEN alertboks, eller også skriver de "undefined".
Sååå.. et eller andet må jeg have gjort galt i det her hovedprogram "index.asp":

<HTML NAME="name1" ID="name1">
  <HEAD NAME="name2" ID="name2">
  </HEAD>

  <FRAMESET NAME="name3" ID="name3" ROWS="140,10,*" COLS="*">
    <FRAMESET ROWS="*" COLS="160,*">
      <FRAME NAME="top1" SRC="top1.asp">
      <FRAME NAME="top2" SRC="top2.asp">
    </FRAMESET>

    <FRAMESET ROWS="10,*" COLS="*">
      <FRAME NAME="top3" SRC="top3.asp">
    </FRAMESET>
       
    <FRAMESET NAME="name4" ID="name4" ROWS="*" COLS="175,*">
      <FRAME NAME="menu" SRC="menu.asp">
      <FRAME NAME="indhold" ID="MENU" SRC="indhold.asp">
    </FRAMESET>
   
  </FRAMESET>
   
</HTML>

Er der nogle der har nogle ideer til hvordan jeg i første omgang blot kan få fat i en af de overordnede objekter i index.asp programmet og derpå hvordan jeg fra mit underprogram indhold.asp kan kalde en function som jeg vil lægge på et overordnet niveau?

På forhånd tak! ;o)
Avatar billede skovenborg Nybegynder
01. oktober 2003 - 22:03 #1
det hedder jo parent.indhold.document.navn
altså først skriver du parent.framenavnet.document og derefter har du adgang til alt hvad der ligger i den frame.
Avatar billede loopstudio Nybegynder
01. oktober 2003 - 22:42 #2
Skovenborg: Det lyder rigtigt spændende og logisk, MEN.. jeg kan ikke få det til at virke..

Jeg har nu i programmet i min indholdsframe forsøgt følgende på BODY onLoad:

onLoad="alert(parent.top1.document.name)"

Den siger stadig "undefined", når min alert-boks popper op!

Har du nogle ideer til hvordan det kan være?
Avatar billede loopstudio Nybegynder
01. oktober 2003 - 22:45 #3
Jeg har også prøvet

  onLoad="parent.top1.document.test()"

som jeg ville have til at kalde min javaScript rutine i top1.asp programmet som så sådan ud:

<HEAD>
  <SCRIPT language='JavaScript'>
    function test()
    {
      alert('test')
    }
  </SCRIPT>
</HEAD>

Og der skete ingen ting. Den kom IKKE op og sagde "test".
Avatar billede skovenborg Nybegynder
01. oktober 2003 - 22:45 #4
hvad er name egentlig???

Hvis det er et objekt du har kaldt for name så må du omdøbe det, da name bruges af javascript, hvilket kunne forklare din fejl.
Følgende script ser mere ud til at hente navnet på document.
Avatar billede skovenborg Nybegynder
01. oktober 2003 - 22:53 #5
Jeg tror du har fat i en af de typiske fejl når man bruger frames og javascript. Problemmet, tror jeg, er at du kalder funktionen før den anden frame er læst ind.

Prøv at kigge på det her spørgsmål. Måske kan det give dig et hint:
http://www.eksperten.dk/spm/406632
Avatar billede loopstudio Nybegynder
01. oktober 2003 - 23:37 #6
skovenborg: Nej, nej.. jeg har selvfølgelig ikke kaldt noget for "name". Jeg bruger name for blot at teste om jeg overhovedet har fat i noget eksisterende objekt og for at se hvad det er for et. Men lige meget hjælper det!
Og alle framesne ER læst ind!

Altså, hvis jeg f.eks. skriver alert(self.name) nede i min indholdsframe, så siger den jo "indhold" som svar, men hvis jeg skriver alert(parent.name) så siger den ikke noget.
Og når jeg prøver: alert(parent.top1.document.name) så siger den "undefined" hvilket jo må betyde at den IKKE kan se "top1" via den metode du gav mig.. Den burde jo havde svaret "top1", hvis den virkelig havde fat i "top1"-objektet, så vidt min lille javaScript-viden.. ;o)

Er jeg gal på den, eller..?

Du kan måske vise mig et lille kodeeksempel som kan kalde en lille javaScript-function i et overliggende vindue til en frame?

Under alle omstændigheder kigger jeg lige på dit link ;o)
Avatar billede skovenborg Nybegynder
01. oktober 2003 - 23:44 #7
nåå, nu forstår jeg. Hvis du absolut skal have navnet hedder det bare parent.top1.name
Avatar billede skovenborg Nybegynder
01. oktober 2003 - 23:46 #8
Så hvis du vil kalde en anden funktion i en anden frame skal du bare skrive:
parent.top1.foo(); hvor foo() er din funktion.

Jeg var vist lidt forkert på den før ;-)
Man skal nemlig kun bruge document når man referer til et objekt på siden.
Avatar billede loopstudio Nybegynder
02. oktober 2003 - 10:45 #9
SUPER!! Dér var de forløsende ord! ;o)
Opret du bare et "svar", så du kan få dine point! ;o)
Avatar billede skovenborg Nybegynder
02. oktober 2003 - 16:08 #10
okay :-)
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