Avatar billede Lasse Novice
05. juli 2001 - 01:29 Der 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?
Avatar billede Lasse Novice
05. juli 2001 - 01:30 #1
Jeg bruger IE
Avatar billede jakobandersen Nybegynder
05. juli 2001 - 01:38 #2
Avatar billede Lasse Novice
05. juli 2001 - 01:48 #3
hmm, jeg havde nu ikke tænkt på at bruge noget VB scripting... da jeg ingen forstand har på det.
Avatar billede jakoba Nybegynder
05. juli 2001 - 01:56 #4
der er en grumme nem en:

if ( document.all )        // tester om objektet document.all eksisterer.
  alert( \"JA, så dette er IE\" )
else
  alert( \"NEJ, så dette er ikke IE\" );

fra og med javascript v1.2 (ca 4 år siden) kan man teste på den måde på alle objekter.
Avatar billede jakobandersen Nybegynder
05. juli 2001 - 02:03 #5
gooky-> Det er ikke VBScript... Det er JScrip som er den implementation af Javascript som er i IE.

jakoba-> Det er godt du er trofast til at fjerne mit hoved fra min armhule af og til :-)
Avatar billede Lasse Novice
05. juli 2001 - 02:12 #6
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
Avatar billede jakoba Nybegynder
05. juli 2001 - 02:13 #7
Du fjerner mit hoved, jeg fjerner dit. Det er hvad eksperten.dk handler om.
Avatar billede Lasse Novice
05. juli 2001 - 02:15 #8
det skal lige siges at jeg prøver at referere dette objekt:
window.hej.topFrame.document.search.isbn
Avatar billede jakoba Nybegynder
05. juli 2001 - 02:17 #9
før du tester
window.hej.topFrame.document
    skal du teste
window.hej
    og så
window.hej.topframe
    og så kan du endelig teste
window.hej.topFrame.document

med den fejl du får vil jeg tro det er topFrame der ikke findes.
eller ihvertfald ikke findes i hej
ellser staves med andre store og små bogstaver.

mvh JakobA
Avatar billede Lasse Novice
05. juli 2001 - 02:37 #10
den findes der, fordi hvis jeg venter 200ms(vha) setTimeout, så virker den fint.

Jeg prøver lige dit foreslag og vender tilbage,.
Avatar billede Lasse Novice
05. juli 2001 - 02:47 #11
nope, det virker ikke...

her er min kode:

<HTML>
<HEAD>
    <TITLE>[Ingen titel]</TITLE>
</HEAD>
<BODY>
<script>
var hej=window.open(\'../html/index.html\',\'search\',\'dependent=yes\');

function test() {
    window.hej.topFrame.document.search.isbn.value=\"hello\";
    window.hej.topFrame.test();
}
while(!window.hej) {
    while(!window.hej.topFrame) {
        while(!window.hej.topFrame.document) {
            while(!window.hej.topFrame.document.search) {
                while(!window.hej.topFrame.document.search.isbn) {
                }
            }
        }
    }
};
test();

</BODY>
</HTML>


den samme fejl meddelelse kommer.... men det er kun nogen gange... andre gange virker det bare...
Avatar billede Lasse Novice
05. juli 2001 - 03:50 #12
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!
Avatar billede Lasse Novice
05. juli 2001 - 04:52 #13
har selv fundet en løsning...
Avatar billede jakoba Nybegynder
05. juli 2001 - 08:46 #14
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.

mvh JakobA
Avatar billede jakoba Nybegynder
05. juli 2001 - 09:00 #15
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)
Avatar billede Lasse Novice
05. juli 2001 - 16:16 #16
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?
Avatar billede jakoba Nybegynder
05. juli 2001 - 16:22 #17
Ja hvis du vil lægge et link, det ville være rart.
Avatar billede Lasse Novice
05. juli 2001 - 16:34 #18
ehhhh, jeg har ingen ekstern hjemmeside, men jeg kan da poste det her... der er altså 4 filer, så de kommer en efter en:

************ramme1.html***************

<html>
<FRAMESET onload=\"\" rows=\"82,*,42\" border=\"1\" FRAMESPACING=\"0\" TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">
  <FRAME name=\"up\" src=\"\" scrolling=\"no\" border=\"0\" frameborder=\"no\" noresize TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" style=\"border-bottom: solid #99ccff 1px;\"></FRAME>
  <FRAME name=\"down\" src=\"index.html\"  TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" FRAMEBORDER=\"1\" BORDER=\"1\"></FRAME>
</FRAMESET>
</html>

***************ramme2.html*************

<html>
<FRAMESET onload=\"\" rows=\"82,*,42\" border=\"1\" FRAMESPACING=\"0\" TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">
  <FRAME name=\"up2\" src=\"\" scrolling=\"no\" border=\"0\" frameborder=\"no\" noresize TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" style=\"border-bottom: solid #99ccff 1px;\"></FRAME>
  <FRAME name=\"down2\" src=\"index2.html\"  TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" FRAMEBORDER=\"1\" BORDER=\"1\"></FRAME>
</FRAMESET>
</html>

***********index1.html***************

<html>
<head>
<script>
function newWindow() {
    var new_window=window.open(\'ramme2.html\', \'new\', \'dependent=yes\');
}
</script>
</head>
<body onload=\"newWindow()\">
<form name=\"et\">
<input type=\"text\" name=\"lort1\" value=\"1\">
<input type=\"text\" name=\"lort2\" value=\"2\">
<input type=\"submit\">
</form>

<form name=\"to\">
<input type=\"text\" name=\"lort3\" value=\"3\">
<input type=\"text\" name=\"lort4\" value=\"4\">
<input type=\"submit\">
</form>

God tur
</body>
</html>

*************index2.html************

<html>
<head>
<script>
function index2() {
    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>

Det var så det...
Avatar billede jakoba Nybegynder
05. juli 2001 - 17:42 #19
det var kun i index2.html der skulle rettes:

--------  ramme1.html

<html>
<FRAMESET onload=\"\" rows=\"82,*,42\" border=\"1\" FRAMESPACING=\"0\"
          TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">
  <FRAME name=\"up\" src=\"about:blank\" scrolling=\"no\" border=\"0\" frameborder=\"no\"
        noresize TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\"
        style=\"border-bottom: solid #99ccff 1px;\">
  <FRAME name=\"down\" src=\"index1.html\"  TOPMARGIN=\"0\" LEFTMARGIN=\"0\"
        MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" FRAMEBORDER=\"1\" BORDER=\"1\">
  <frame name=\'bunden\' src=\'about:blank\'>
</FRAMESET>
</html>


--------  ramme2.html

<html>
<FRAMESET onload=\"\" rows=\"82,*,42\" border=\"1\" FRAMESPACING=\"0\"
          TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">
  <FRAME name=\"up2\" src=\"about:blank\" scrolling=\"no\" border=\"0\" frameborder=\"no\"
        noresize TOPMARGIN=\"0\" LEFTMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\"
        style=\"border-bottom: solid #99ccff 1px;\">
  <FRAME name=\"down2\" src=\"index2.html\"  TOPMARGIN=\"0\" LEFTMARGIN=\"0\"
        MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" FRAMEBORDER=\"1\" BORDER=\"1\">
  <frame name=\'bunden2\' src=\"about:blank\'>
</FRAMESET>
</html>


--------  index1.html

<html>
<head>
<script>
function newWindow() {
    var new_window=window.open(\'ramme2.html\', \'new\', \'dependent=yes\');
}
</script>
</head>
<body onload=\"newWindow()\">

<form name=\"et\">
<input type=\"text\" name=\"lort1\" value=\"1\">
<input type=\"text\" name=\"lort2\" value=\"2\">
<input type=\"submit\">
</form>

<form name=\"to\">
<input type=\"text\" name=\"lort3\" value=\"3\">
<input type=\"text\" name=\"lort4\" value=\"4\">
<input type=\"submit\">
</form>

God tur
</body>
</html>


--------  index2.html

<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
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