Avatar billede mik789 Nybegynder
22. august 2002 - 13:35 Der er 11 kommentarer og
1 løsning

tjekke om vindue er åbent

Jeg har problemer med at tjekke om et vindue er åbent. Vinduet åbnes med window.open() fra en række links, men kun hvis det ikke allerede er åbnet skal window.open() aktiveres, ellers skal vinduet bare opdateres. Min script ser sådan ud:

<script type="text/javascript">
<!--

  leftPosition=0;
  if (screen) {
    leftPosition = screen.width -535
  }

  function myOpen(name) {
    name="specialistliste.html#"+name;
    if (self.win) {
      win.focus();
      win.location=name;
    } else {
      win = window.open(name, "win", "width=510,height=333,top=0,left="+leftPosition+",scrollbars=no,resizable=no,dependent=yes");
      win.focus();
    }
  }

//-->
</script>

og så:

<a href="java script:myOpen('peterandersen');void(0)">Peter B. Andersen</a><br>
<a href="java script:myOpen('vagnandersen');void(0)">Vagn Andersen</a><br>
<a href="java script:myOpen('mariannefibiger');void(0)">Marianne Q. Fibiger</a><br>


-- Men som det står nu tjekkes der jo egentlig ikke på om vindet er åbnet, men bare om vinduet findes (og det gør det også hvis det har været åbnet og lukket igen, så derfor kan det derefter ikke åbnes igen). Men hvis jeg i den første del af funktionen forsøger med: if (self.win.!closed) får jeg fejl ("der mangler en Id") fordi scriptet af gode grunde ikke kan finde win før det har været åbnet. A'ka'ik'rigti fin'uaed...
Avatar billede =maddog= Nybegynder
22. august 2002 - 13:50 #1
prøv
try (win.focus) {
// win er åbnet
} catch (ex) {
// win er lukket
}

har set det virke. orker ikke at teste.
Avatar billede =maddog= Nybegynder
22. august 2002 - 13:51 #2
try (win.focus())
Avatar billede mik789 Nybegynder
22. august 2002 - 14:02 #3
hvad gør catch (ex) ?
Avatar billede =maddog= Nybegynder
22. august 2002 - 14:04 #4
det er sådan lidt 'skummel' kode
vi prøver at give win fokus. hvis vi ikke kan det 'kaster' browseren en udtagelse (exception) der indeholder fejlen. den undtagelse griber vi så (catch) og behandler.
Avatar billede mik789 Nybegynder
22. august 2002 - 14:12 #5
jamen det her må kunne lade sig gøre helt uden noget skummelt - det er bare mig der ikke er dygtig nok til js til at jeg lige kan se hvordan. det drejer sig vel om at bruge window.closed egenskaben på den rigtige måde i dette tilfælde.
Avatar billede mik789 Nybegynder
22. august 2002 - 14:12 #6
smider også lige flere point ind
Avatar billede mik789 Nybegynder
22. august 2002 - 14:47 #7
OK - det var vist en syntaksfejl. Nu ser funktionen sådan ud i stedet:

  function myOpen(name) {
    name="specialistliste.html#"+name;
    if (self.win&&!win.closed) { // det er denne linje der er ændret
      win.focus();
      win.location=name;
    } else {
      win = window.open(name, "win", "width=510,height=333,top=0,left="+leftPosition+",scrollbars=no,resizable=no,dependent=yes");
      win.focus();
    }
  }

-- dvs. !win.closed i stedet for som jeg prøvede før: win.!closed - og nu fungerer det efter hensigten. Bort set fra at jeg også godt ville have vinduet til automatisk at lukke hvis man forlader opener siden. Jeg har forsøgt med flg. i den fil, som window.open() åbner:

if (opener.closed) self.close();

- men det virker ikke efter hensigten. Nogle bud på det?
Avatar billede Slettet bruger
22. august 2002 - 16:33 #8
For det første ville det betyde, at du køre et timeout, der tjekkede, om opener var lukket, fx hvert sekund og for det andet virker closed attributten vist ikke for et vindue, som du ikke selv har åbnet med JavaScript. Du kan evt. bruge onUnload i opener:

<body onUnload="if (win && !win.closed) win.close();">

... men onUnload kaldes jo også, når man surfer væk fra siden ved fx bare at skrive en anden url eller trykke på et link.
Avatar billede Slettet bruger
22. august 2002 - 16:33 #9
at du køre = at du skulle køre
Avatar billede mik789 Nybegynder
23. august 2002 - 08:17 #10
phoenixv> tak for tippet. det fungerer faktisk fint. det nye vindu SKAL nemlig lukkes hvis man surfer væk fra opener siden. Og det lukker ikke ved klik på de links der åbner det (som du vist mener det burde gøre). Vel fordi alle linkene jo indeholder en void(0) operator - mon ikke?
Avatar billede mik789 Nybegynder
23. august 2002 - 08:19 #11
jeg er så spændt på hvordan det fungerer i IE 5.0/4.0. For i 5.5+ behøver man slet ikke den oprindelige øvelse med at tjekke om vinduet er åbent for kun at opdatere det (og ikke åbne endu et vindue engang hver gang der klikkes på et nyt link - det var det der var problemet)
Avatar billede Slettet bruger
23. august 2002 - 14:41 #12
Det jeg mente var, at vinduet lukker, når man klikker på et link, der fører væk fra siden.
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