19. september 2002 - 11:51Der er
19 kommentarer og 2 løsninger
Manipulation af eksternt vindue
Hejsa
Jeg skal manipulere (lukke) et browser vindue, fra et script i et andet vindue. Normalt ved jeg at jeg kan åbne vinduet og samtidigt linke det til en variabel:
Men hvad gør jeg hvos den side hvorfra jeg vil lukke vinduet ikke er den samme som der hvor jeg har åbnet det. Så kan jeg jo ikke skrive popUp.close(); da popUp ikke eksisterer i dette vindues enviroment.
Kan man ikke adressere eksterne vinduer på andre måder fx. via et root level fx: _root.windows[theWindowName].close(); findes der noget i den retning jeg kan gøre?
Er der evt en mulighed for at overføre min variabel popUP fra en htmlside til en anden? evt. via php...
Jeg har kigget lidt rundt, og tror du har to muligheder: Vent på Jacoba, som ved alt Som phoenixv siger, lav vindue a som en frameset, med en usynlig frame der indeholder din window.open(), som du så kan bruge til at lukke vinduet.
OK, der er en noget sær metode. I side1.html laver du en form, name="formen" og i den et tekstfelt, name="feltet" value=0 Al det laver du skjult. I side3.html laver du en form, name="formen" og i den et tekstfelt, name="feltet" value=0 i side2.htm har du funktionen: function doit(){ a = opener.formen.feltet.value; if (a == 1) self.close(); setTimeout("doit()", 100); } som du starter i body onload=" Når du så vil lukke dit andet vindue, sætter du bare document.formen.feltet.value=1; så lukker vinduet sig.
Synes godt om
Slettet bruger
20. september 2002 - 14:23#12
ras2000>> Det virker første gang, men derefter giver det en "access denied"-fejl hver gang, man går ind på siden.
Synes godt om
Slettet bruger
20. september 2002 - 14:24#13
Men hvis du også giver den en lille forsinkelse i body onLoad:
<body onLoad="setTimeout(doit, 100);">
... så virker det!
Synes godt om
Slettet bruger
20. september 2002 - 14:25#14
Næ, fejlen opstod igen... Denne gang bare ved tredje forsøg! :)
Synes godt om
Slettet bruger
20. september 2002 - 14:29#15
En try catch ser dog ud til at gøre arbejdet:
function doit() { try { if (parseInt(opener.document.formNavn.feltNavn.value) == 1) self.close(); } catch (err) { // } setTimeout(doit, 100); }
Ja, det er ikke en voldsom elegant løsning. Der er vist også et problem hvis man vælger at lukke vindue a, men det lader til at din catch tingling klarer den. Jeg var godt klar over svagheden da jeg skrev det, men jge mener at du viste mig den finurlighed engang i en anden sammenhæng, så det tænkte jeg at du kunne får lov til at tilføje :) Men Mikkel har vist givet op?
Synes godt om
Slettet bruger
21. september 2002 - 10:06#17
Ja, eller også er han på ferie!
Mht. muligheden at brugeren lukker vindue a (eller b), så kan man tilføje dette til scriptet, så det ikke belaster computeren:
function doit() { if (opener.closed) return; try { if (parseInt(opener.document.formNavn.feltNavn.value) == 1) self.close(); } catch (err) { // } setTimeout(doit, 100); }
Hejsa.. jeg fik ikke mails om at der var aktivitet på tråden, men nu ser jeg jo at der har været mange bud.. jeg kikker lige på det, så skal jeg nok vende tilbage med evt. point :)
vil det sige at "opener." er et link til det vindue som åbnede det aktuelle vindue?
phoenixv hvis du vil have andel i point så skriv et svar.. du har kun kommenteret, men jeg synes da du skal have de 50 point.. det hele er dog ganske besværligt i forhold til hvis winduet kunne adresseret direkte sådan her: BrowserEnviromentRoot.windows[theparticularwindowname].close();
det var noget i den stil jeg havde håbet på, men I gjorde jer jo umage, og hvis det nu ikke kan være mindre kringlet er der jo ikke noget at stille op.
Synes godt om
Slettet bruger
27. september 2002 - 15:37#21
Husk også at honorere ras2000! Det var ham, der kom med idéen!
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.