Avatar billede axkris Nybegynder
20. juni 2003 - 23:41 Der er 11 kommentarer og
2 løsninger

Check om popup-vindue er åbent?

Hej

Hvordan checker man om et bestemt popup-vindue er åbent eller lukket?

Det er fordi, at hvis mit popup-vindue allerede er åbent, så behøver jeg jo ikke at åbne det igen, men blot at flytte fokuset til det.
Avatar billede kimiwan Nybegynder
20. juni 2003 - 23:59 #1
function openwindow(){
    if (win == null){
        var win = window.open("http://www.google.com/", "bleh", "");
    }
    else{
        win.focus();
    }
}

......

<input type="button" value="Open Window" onclick="openwindow()" />
Avatar billede olebole Juniormester
21. juni 2003 - 02:36 #2
<ole>

En JS-popup har en boolsk property, der hedder 'closed'. Problemet med den er, at den selvfølgelig først eksisterer, når vinduet har være åbnet. Et lille 'hack' er dog at oprette et globalt objekt og sætte en property på det. Senere udskifter vi så objektet med popup'en:

<script type="text/JavaScript">
var win = new Object();
win.closed = true;
function myOpen() {
    win = window.open("side.html","navn");
}
</script>

<button onclick="alert(win.closed)">Lukket ?</button><br>
<button onclick="myOpen()">Åben</button>

... eller lidt mere 'sexy':

<script type="text/JavaScript">
var win = {"closed":true};
function myOpen() {
    win = window.open("side.html","navn");
}
</script>

/mvh
</bole>
Avatar billede grunken Nybegynder
21. juni 2003 - 02:49 #3
ole er det IK bare at ?

function myOpen() {
  if (win.closed!=true){
    win = window.open("side.html","navn");}
  else{
    win.focus();}
}
Avatar billede olebole Juniormester
21. juni 2003 - 02:56 #4
Nååhhhh ... jeg havde ikke læst spm'et ordentligt. Nej, så er det bare:

function myOpen() {
    var win = window.open("side.html","navn");
    win.focus();
}

Da vinduet hele tiden har samme navn (andet argument), så åbnes der ikke et nyt vindue - men siden loades i 'det gamle'  :)
/mvh
Avatar billede axkris Nybegynder
21. juni 2003 - 10:22 #5
Men siden må ikke loades ind igen, fordi så mister brugeren alt den information, som findes der.... det er et chat-vindue, som brugeren har minimeret, og hvis brugeren skulle være så klumbet at klikke på "chat-linket" igen, skal der ikke åbnes et nyt vindue, idet chat-vinduet allerede er åbent... der skal blot skiftes fokus til det.

Så hvilken af jeres kode-eksempler skal jeg anvende?
Avatar billede Slettet bruger
21. juni 2003 - 10:41 #6
Du skal anvende oleboles her: 21/06-2003 02:36:05

Jeg vil dog lige give min version med:

<script type="text/javascript">
vin = null;

function abnVindue() {
  if (vin != null && !vin.closed)
    vin.focus();
  else
    vin = window.open("din_side.html", "nytVindue", "width=300,height=300");
}
</script>
Avatar billede axkris Nybegynder
21. juni 2003 - 14:19 #7
Den gør det omsatte af hvad de burde gøre. Når vinduet er åbent, så forsøger den at åbne et nyt og når et er lukket så forsøger det at give det fokus:

<a CLASS=Link2White href="java script:openChat();">Deltag her</a>

<script type="text/javascript">
popupWin = null;

function openChat() {
    if (popupWin != null && !popupWin.closed) {   
        alert("vinduet er allerede åbent - giver det fokus");
        popupWin.focus();
    }
      else {
        alert("åbner et nyt vindue.");
        PopWin('/chat/ramme.asp?chatMode=active','chat','no','no','no','no','no','yes','600','800');
    }
}
</script>

<script>
function PopWin(url, name, menubar, toolbar, location, status, scrollbars, resizable, h, w) { var ww = 480, wh = 340, leftPos = null, topPos = null;

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
ie5 =(document.getElementById)? true:false
ns6 = (document.getElementById && !document.all)?true:false;

var wh = (ie4||ie5)?document.body.clientHeight : window.innerHeight;
var ww = (ie4||ie5)?document.body.clientWidth : window.innerWidth;

if (top.screen){
  if (screen.width){
    leftPos = Math.round((ww-w-10)/2);
    topPos = Math.round((wh-h-29)/2);
  } else {
    leftPos = 50
    topPos = 50
  }
}

popupWin = window.open(url, name, 'menubar=' + menubar + ', toolbar=' + toolbar + ', location=' + location + ', status=' + status + ', scrollbars=' + scrollbars + ', resizable=' + resizable + ', height=' + h + ', width=' + w + ', top=' + topPos + ', left=' + leftPos +'')
}
</script>
Avatar billede axkris Nybegynder
21. juni 2003 - 14:24 #8
Jeg prøver lige igen :-)

Scriptet gør det modsatte af, hvad det burde gøre. Når vinduet er åbent, så forsøger scriptet at åbne et nyt vindue, og når vinduet er lukket, så forsøger scriptet at give det fokus:
Avatar billede axkris Nybegynder
21. juni 2003 - 14:37 #9
Min fejl ... hvem ellers :-)

Det virker nu ... mange tak for hjælpen
Avatar billede axkris Nybegynder
22. juni 2003 - 15:44 #10
Jeg har fundet en mangel :-) og det er, hvis jeg går videre til en anden side, hvor jeg klikker igen på det samme link (linket ligger i en border, som vises på alle sider) så vil scriptet åbne et nyt vindue. Det er ikke så smart, når nu vinduet allerede er åbnet (det er bare blevet åbne fra en anden side).

Kan I hjælpe igen? :)


<!--#include virtual = "/common/popupWindow.asp"-->

<script type="text/javascript">

popupWin = null;
member = '<%=Request.Cookies("Snitz00User")("Name")%>'

function openChat(chatMode) {
   
    if (member !="") {
        if (popupWin != null && !popupWin.closed) {   
            popupWin.focus();
        }
          else {
            PopWin('/chat/ramme.asp?chatMode='+chatMode,'chat','no','no','no','no','no','yes','600','800');
        }
    }
    else {
        alert('Du er enten ikke logget ind, eller så har du ikke oprettet dig som medlem endnu (gratis).');
        location.href='xxxxxxxxxxxxxxxxxx';
    }
}
</script>
Avatar billede olebole Juniormester
22. juni 2003 - 15:56 #11
Hvis du i hovedvinduet navigerer til en anden side, end den, der har åbnet vinduet, taber du (browseren) naturligvis al viden om popup'ens eksistens.
Det kan kun omgåes ved at bruge frames ... eller at lægge info om popup'en i en cookie (evt. en session) - men det bliver let noget rod.
/mvh
Avatar billede axkris Nybegynder
22. juni 2003 - 16:06 #12
Ok, det vil jeg prøve - tak for hjælpen igen :)
Avatar billede olebole Juniormester
22. juni 2003 - 16:11 #13
... anytime  :)
I øvrigt er frames-løsningen den klart letteste. Cookie/session bliver _meget_ let noget bøvl, du ville ønske, du ikke havde kastet dig ud i  ;o)
/mvh
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