05. juli 2001 - 01:29Der er
18 kommentarer og 1 løsning
checke om objekt eksisterer
Jeg vil gerne finde ud af om et objekt eksisterer. Er der en eller anden funktion til det, så man ikke får den irreterende fejlmeddelelse hvor man skal trykke ja/nej til at debugge?
nope, sådan foregår det ikke... jeg får smidt en error skærm i hovedet:
An runtime error has occured Do you wish to debug?
Line 14: Error: \'window.hej.topFrame.document\' is null or not an object
Det jeg prøver på er at åbne et nyt vindue vha nytvindue = window.open(url, navn, blablabla), også refere til et element i det nye vindue. Men da dette ikke er oprettet endnu, får jeg som sagt denne fejl
ok, jeg tror jeg vil gøre det den modsatte vej... når det dokument, som jeg åbner i det nye vindue, er loadet færdigt, så kalder jeg parent vinduet....., men det kan jeg heller ikke lige finde ud af ........ HJÆÆÆÆÆÆÆÆÆÆÆÆÆÆLP!
Det stykke kode forklarer en hel del. Du er samspilsramt. af: 1) IE vil så genre hjælpe, når den tror man har lavet en fejl. 2) en hel masse navne har foruddefineret betydning.
1: du har nok bemærket at når man adresserer underobjekter i IE kan man udelade en hel del. Hvis fx. din side indeholder en formular ved navn korzybski så ligger den form i dit dokumentobject: self.documnet.korzybski.fejltfjorten = \"Dette skal stå i feltet\"; men hvis man udelader document finder IE formen alligevel: self.korzybsiki.feltfjorten = \"Dette skal stå i feltet\"; eller sågar bare korzybski.feltfjorten = \"Dette skal stå i feltet\";
Jeg ved ikke præcis hvordan den går frem (moonduck we need you) men det ser ud somom det måske er noget i retning af at den søger i det objekt den er i, om der ligger et objekt med det navn der. hvis ikke fortsætter den med at søge i objektets under objekter osv. osv. indtil den finder noget eller løger tør for underobjekter. Og det giver meget ofte det ønskede resultat.
2: i et vindue (==en ramme) er der en del faste objekter: window location href search hash document location href search hash body all her kommer alle de navne du definerer imellen <body> og </body> style ... osv. anchors // dine links forms // dine <form .. </form> blanketter ... osv. frames // liste over frameset rammer og popop vinduer dannet fra dette vindue ... osv.
alt ialt er der ret mange objekter og underobjekter.
så lad os nu langsomt (for en computer) åbne det vindue nu findes window den finde altid, ellers kan scriptet slet ikke køre vi kalder window.open og der dannes et vindues objekt nu findes: window.hej som peger på popop winduet vi begynder alt loade filen ../html/index.html den stiller et frameset op der danner en ramme i window.hej.frames.topFrame, og der er nok til at: nu findes: window.hej.topFrame vinduet, men det er tomt vi loader framesettets underfiler og efterhånden som filen læses bliver der efterhånden dannet et dokumentobjekt nu findes: window.hej.topFrame.document og så kommer problemet.
indeni document bliver der automatisk dannet et location objekt (et deprecated levn fra gamle dage) og u det location objekt ligger et underobjekt der hedder search (indeholder værdien af en evt søge parameter)
og siden filen endnu ikke er færdiglæst finde skriptet den når den leder efter: window.hej.topFrame.document.search (dvs document.location.search) det skader såmænd ikke. vi læser videre i filen og det rigtige \"search\" objekt bliver oprettet. IE ved godt at de navne brugeren laver skal findes først. men det skift: \"Hey. nu har han lavet en \'search\' gem den i location!\". kan den alligevel ikke klare, ikke samtidig med at du kører en while løkke der leder efter \'window.hej.topFrame.document.search.isbn\' hele tiden.
kort sag: Samspilsramt.
jeg vil tro at hvis du kalder din form for <form name=\'xxxsearch\' ...> så vil det virke hver gang.
personlig fortrækker jeg programmer der ikke hjælper så meget.
alternativt kunne du lave din test om til: while(!window.hej) { while(!window.hej.topFrame) { while(!window.hej.topFrame.document) { while(!window.hej.topFrame.document.forms) { while(!window.hej.topFrame.document.forms.search) { while(!window.hej.topFrame.document.forms.search.isbn) { } } } } } }; så løkken ikke kan finde den \'search\' der ligger i location (hvis altså jeg har gættet rigtig og \'search\' er en formular)
ok, jeg har prøvet din alternative test, og den virkede desværre heller ikke... Derfor har jeg prøvet andre ting, og det virkede ganske fortræffeligt. Det jeg gjorde var at oprette et barnevindue, og i dette lade onload kalde parentvinduets sendVariableTilBørnevinduet-funktion. Det virkede lige efter hensigten. Stadig har jeg et problem(ikke så stort, men det er der stadig), og det er, at jeg gerne vil tjekke om børnevinduet er kaldt fra et andet vindue(window.opener). window.opener bliver sat ligeså snart et vindue er et barn af et andet. Tester jeg dog på det(og vinduet samtidig IKKE er et barnevindue), så står jeg i samme situation som før - Ønsker du at debugge?
<html> <head> <script> function index2() { if ( top.window.opener && top.window.opener.document ) { top.window.opener.status=\'Den er loadet OK\'; top.window.opener.document.et.lort1.value=\"hello\"; } } </script> </head> <body onload=\"index2()\">
God tur2 </body> </html>
mvh JakobA
Synes godt om
Ny brugerNybegynder
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.