Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 15:15 Der er 37 kommentarer og
1 løsning

åbent Window vil ikke lukke

Jeg er igang med at lave et lille script der åbner nogle vinduer når man klikker på nogle links. alt virker som det skal på nær en ting.
Hvis et vindue allerede er åbent skal det lukkes, for så at åbnes igen, men den del vil bare ikke virke for mig . Nogen der kan hjælpe ???

Her der den del af srictet der skulle lukke vinduet, Hvad gør jeg galt ???

alert (vinNavn);                                                                // TEST - winName

var vindue = {};
    if (vindue[vinNavn] && !vindue[vinNavn].closed){
alert ("CLOSEING"+"\n"+vinNavn);                                                // TEST -luk
    vindue[vinNavn].close();
    delete vindue[vinNavn];
    }

alert ("Aabner"+"\n"+vinNavn+"\n"+vinSet);                                    // TEST - Aaben
vindue = window.open("",vinNavn,vinSet+",width=1,height=1,"+vinOpt);
vindue.focus();
Avatar billede thrytter Nybegynder
03. juni 2006 - 16:35 #1
Prøv om du kan bruge min lille eksempel til noget:

<script type="text/javascript">
{           
  var w;
 
  function openW()
  {
    if (w)
      w.close();

    alert("ÅBNER VINDUE");

    w = window.open("", "TEST", "height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");
    w.focus();
  }

  function closeW()
  {
    if (w)
    {
      alert("LUKKER VINDUE");
      w.close();
      w = null;
    }
}
</script>
Avatar billede thrytter Nybegynder
03. juni 2006 - 16:37 #2
Glemte vist en afslutnings }
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 17:31 #3
Detsvære
ikke lige det jeg er ude efter

Når jeg kalder funktionen skal den åbne vinduet hvis det ikke er åben ... og lukke det også åbne det igen hvis det er åbent ...
Altså lukke funktionen skal ligge i  samme funktion men kun aktiveres hvis vinduet er åbent
Avatar billede olebole Juniormester
03. juni 2006 - 18:04 #4
<ole>

Du roder tingene lidt sammen  :)

var vindue = {};
function myOpen() {
    if (!vindue.closed) vindue.close();
    vindue = window.open("","vinNavn");
    vindue.focus();
}

/mvh
</bole>
Avatar billede olebole Juniormester
03. juni 2006 - 18:07 #5
Du kan også holde styr på flere vinduer:

var vindue = {};
function myOpen(url, winName) {
    if (vindue[winName] && !vindue[winName].closed) {
        vindue[winName].close();
        delete vindue[winName];
    }
    vindue[winName] = window.open(url, winName);
    vindue[winName].focus();
}
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:08 #6
>Du roder tingene lidt sammen  :)

Sikkert nok...*G* ... er bestemt ikke specielt god til Javascript...  :-)

Prøver dit forslag
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:20 #7
Takker ... må prøve at lege lidt med det

din første gav scriptfejl i "if (!vindue.closed) vindue.close();"


>Du kan også holde styr på flere vinduer:

Er netop det jeg skal

kan dog ikke helt forstå hvad
vindue[winName] = window.open(url, winName);
vindue[winName].focus();
delen skal gøre godt for ???
jeg åbner jo vinduet andetsteds (og på en lidt anden måde)

Jeg er også lidt usikker på det med at putte en function ind i en fuktion ???
Avatar billede olebole Juniormester
03. juni 2006 - 18:29 #8
Ja, den første skal naturligvis se sådan ud:

var vindue = {closed:true};
function myOpen() {
    if (!vindue.closed) vindue.close();
    vindue = window.open("","vinNavn");
    vindue.focus();
}

"Jeg er også lidt usikker på det med at putte en function ind i en fuktion ???"
- så er det sandelig godt, jeg ikke roder med den slags i denne tråd  ;o)

Prøv at læse denne artikel:
    http://www.eksperten.dk/artikler/227
- så forstår du, hvad der foregår  ;o)

'vindue' er et objekt - og ved et JS-objekt kan du frit vælge mellem dot- og array-notation.

var myObj = {}; // det samme som new Object()
myObj.navn = "ib";

- sidste linje kunne også skrives:

myObj["navn"] = "ib";
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:33 #9
Vil prøve at læse den artikkel :-)

Kan dog sige at de eksempler du er kommet med ikke virker .... detsvære
du kan se her hvad det er jeg prøver .. http://home19.inet.tele.dk/jgom/test/slideopenwindow-test-1.html

Jeg kan ikke ihelt forstå hvad den open funktion skal til for i den del der skal lukke ???
Avatar billede olebole Juniormester
03. juni 2006 - 18:35 #10
Du må ikke forlange, jeg skal forholde mig til GL-scripts ... det er min tid trods alt for dyrebar til  :)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:37 #11
*GGG* .... Er ikke GL script (enu)  .....
Avatar billede olebole Juniormester
03. juni 2006 - 18:38 #12
Dette fungerer helt fint:

<script type="text/JavaScript">
var vindue = {};
function myOpen(url, winName) {
    if (vindue[winName] && !vindue[winName].closed) {
        vindue[winName].close();
        delete vindue[winName];
    }
    vindue[winName] = window.open(url, winName);
    vindue[winName].focus();
}
</script>

<button onclick="myOpen('http://www.eksperten.dk', 'gnu')">TEST</button>
<button onclick="myOpen('http://www.google.dk', 'hest')">TEST</button>
Avatar billede olebole Juniormester
03. juni 2006 - 18:39 #13
- du kan kun åbne ét vindue ad gangen med navnet 'gnu' og kun ét med navnet 'hest'  :)
Avatar billede olebole Juniormester
03. juni 2006 - 18:41 #14
Dit objekt 'vindue' ender med at se sådan ud:

vindue = {
  gnu: [Window Object],
  hest: [Window Object]
}
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:45 #15
>du kan kun åbne ét vindue ad gangen med navnet 'gnu' og kun ét med navnet 'hest'

Jeps ... men mit problem er hvis jeg hvis jeg skal flytte "gnuen" fra punkt A til B eller genåbne den...bliver jeg nød til at lukke den først hvis den allerede er åben (ellers går der kluder i Mozilla)
Avatar billede olebole Juniormester
03. juni 2006 - 18:46 #16
Jame, det er jo præcis, hvad der sker. Har du åbnet en gnu - og prøver at åbne en gnu mere - lukkes gnu først ... og du åbner en ny gnu
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:47 #17
*G*...  jamen det virker sku ikke ... den lukkes ikke ... den flytter bare ... og i mozilla flytter den forkert...
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 18:50 #18
nu har jeg gjort som du har foreslået
og sat følgende ind i mit script

var vindue = {};
function myOpen(vinNavn) {
    if (vindue[vinNavn] && !vindue[vinNavn].closed) {
alert ("CLOSEING"+"\n"+vinNavn);
        vindue[vinNavn].close();
        delete vindue[vinNavn];
        }
    vindue[vinNavn] = window.open(vinNavn);
    vindue[vinNavn].focus();
}
Nu skulle jeg da gerne få en Alert når vinduet lukkes ???
men det får jeg aldrig
Avatar billede olebole Juniormester
03. juni 2006 - 18:51 #19
Så prøv med:
    if (vindue[vinNavn]) {
Avatar billede olebole Juniormester
03. juni 2006 - 18:52 #20
- der er vist noget med nogle gamle, syge JS-implementeringer i MacOS-browserne  :oP
Avatar billede olebole Juniormester
03. juni 2006 - 18:55 #21
- selvom der nu her er tale om en DOM-property ... ikke en JS-property  =)
Avatar billede olebole Juniormester
03. juni 2006 - 18:57 #22
This works like a charm  :)

<script type="text/JavaScript">
var vindue = {};
function myOpen(url, winName, left, top) {
    if (vindue[winName]) {
        vindue[winName].close();
        delete vindue[winName];
    }
    vindue[winName] = window.open(url, winName, "width=500,height=400,left="+left+",top="+top);
    vindue[winName].focus();
}
</script>

<button onclick="myOpen('http://www.eksperten.dk', 'gnu', 100, 100)">TEST</button>
<button onclick="myOpen('http://www.google.dk', 'gnu', 500, 600)">TEST</button>
Avatar billede olebole Juniormester
03. juni 2006 - 19:01 #23
- og da vi delete'er det pågældende element fra objektet 'vindue', når vi lukker vinduet:
    vindue[winName].close();
    delete vindue[winName];

- er der ikke grund til både at spørge, om det eksisterer i objektet og om vinduet er åbent:
    if (vindue[vinNavn] && !vindue[vinNavn].closed) {

Det er nok at spørge, om det eksisterer i objektet:
    if (vindue[winName]) {

- håber det giver mening  :)
Avatar billede olebole Juniormester
03. juni 2006 - 19:02 #24
"om det eksisterer i objektet" -> om der findes en property på objektet 'vindue' med det navn (winName)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 19:04 #25
- This works like a charm

Ikke hvis jeg kopiere det til en side og ser det i IE :-( får en del fejl i det

http://home19.inet.tele.dk/jgom/test/untitled.html
Avatar billede olebole Juniormester
03. juni 2006 - 19:07 #26
- som sagt: works like a charm  ;o)

Det er den old-tusse-gamle JS-implementering, der ligger i Mac/IE ... den er næsten 10 år gammel og sutter BIG TIME!  :o(

Prøv at se, om det er short-hand object-constructor'en, den brækker sig over:

var vindue = new Object();
Avatar billede olebole Juniormester
03. juni 2006 - 19:11 #27
Hvem kan overhovedet finde på at bruge Mac/IE? Det kan ikke være ret mange sider med JS, man kan få noget ud af  :)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 19:14 #28
prøver

IE bruger jeg kun fordi den er så følsom og flink til at fortælle når der er fejl i scriptet

Det er nu NN/FF der volder mig problemer ...
Mit Script virker fint i IE men i Mozilla sker der underlige ting og sager nå den skal flytte eller genåbne et vindue
Avatar billede olebole Juniormester
03. juni 2006 - 20:18 #29
ehhhhh ... her skriver du da, det er IE, der er problemet (03/06-2006 19:04:11)  :)

Du må få nogle fejlbeskeder, hvis det ikke virker ... hvad siger de?
Avatar billede olebole Juniormester
03. juni 2006 - 20:21 #30
- og hvis du i (03/06-2006 19:04:11) mente, at FF smider nogle fejl, er det bare eksperten.dk, der kaster fejl ... det er ikke mit script  =)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 20:38 #31
*S* ... mener at i IE får jeg evntuelle script-fejlmeddelelser per automatik (gør jeg ikke i NN/FF)

Men selve problemet med scriptet er et NN/FF problem

Hvis du kigger på http://home19.inet.tele.dk/jgom/test/slideopenwindow-test-1.html
er der 5 link
link 3 til 4 åbner nye vinduer men link 1 og 2 åbner det samme vindue (samme navn) men med forskellige settings
ideen er at scripte skal kunne åbne flere vinduer på mange måder eller det samme vindue på mange måde
Fejle i NN og FF består i at hvis man først åbner link 1 (Langt lavt vindue midt på skærm) og så klikker på link 2 så skulle skal vinduet så blive højt og smalt og være midt på skærmen. men i NN / FF positionere det sig på 0.0 (Funger fint nok i IE) ... klikker man så igen på link to stille vinduet sig rigtigt

Håber du forstår den beskrivelse

Så min tanke var at hvis jeg nu lukkede et evnte åbent vindue og så genåbnede det  ville den fejl forsvinde ??

Det jeg mente med (03/06-2006 19:04:11) var at når jeg kopierede dit eksempel får jeg fejl som feks
"object donst suport this method" når jeg forsøger at åbne et nyt ;-)
Avatar billede olebole Juniormester
03. juni 2006 - 20:51 #32
"object donst suport this method" - på hvilken linje?

Jeg forstår ikke problemet - og jeg tror, jeg holder mig til en mere generel diskussion af mine eksempler. Så må du selv finde ud af at bruge dem  :)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 21:02 #33
på linie 10

når jeg klikker på det ene link åbnes vinduet
når jeg klikker på det andet lukkes det første men det andet åbnes ikke
når jeg klikker igen får jeg fejlen
Avatar billede olebole Juniormester
03. juni 2006 - 21:21 #34
Hehe ... og hvad står der på linje 10?  :)
Avatar billede jesper-moeller Nybegynder
03. juni 2006 - 22:12 #35
vindue[winName].close();
Avatar billede jesper-moeller Nybegynder
06. juni 2006 - 11:09 #36
Nå ... nu virker skidtet som det skal :-)

Gider du lægge et svar så jeg kan lukke ;-)
Avatar billede jesper-moeller Nybegynder
16. juni 2006 - 22:28 #37
Vil du ikke ha pointsne ??
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 14:17 #38
jamen så lukker jeg da :-)
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