Avatar billede mikkel_breum Nybegynder
19. september 2002 - 11:51 Der 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:

popUp = window.open(openThisPage, windowName, windowAttributes);

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

mvh
mikkel
Avatar billede nikolajdu Nybegynder
19. september 2002 - 11:54 #1
Er det en side på samme domæne du henter???
Avatar billede mikkel_breum Nybegynder
19. september 2002 - 11:59 #2
ja.. hvis du mener om siderne kommer fra samme webserver.
Avatar billede mikkel_breum Nybegynder
19. september 2002 - 12:02 #3
Spørgsmålet kan også omformuleres meget simpelt:

Hvordan kan man lukke et vilkårligt browservindue fra et script indeholdt i et andet windue, givet at jeg blot kender vinduets navn ?

Er ethvert browservindue ikke at finde som object i et eller andet objekthieraki hvorfra disse objekter kan adresseres?
Avatar billede nikolajdu Nybegynder
19. september 2002 - 12:08 #4
Jeg mener ikke server, men om siderne ligger på samme domæne?? Gør de ikke det, så har du ingen muligheder.
Avatar billede mikkel_breum Nybegynder
19. september 2002 - 12:18 #5
ok.. det gør de. hvordan gør man så?
Avatar billede mikkel_breum Nybegynder
19. september 2002 - 12:26 #6
siderne er åbne på samme computer:

VindueA som rummer "side1.html"  -> åbner ->  VindueB med "side2.html"

herefter loader "side3.html" i VindueA.

Nu vil jeg gerne fra VidueA som nu rummer "side3.html" -> lukke -> VindueB
Avatar billede nikolajdu Nybegynder
19. september 2002 - 12:31 #7
5 minutter.
Avatar billede nikolajdu Nybegynder
19. september 2002 - 12:53 #8
hmmm... Kan ikke huske hvordan man overfører den opener. Det kan Jakob sikkert - Vent til han eller en anden "klogeåge" kommer forbi :)
Avatar billede Slettet bruger
19. september 2002 - 15:44 #9
Løsningen kunne være at have en skjult frame, der åbner vinduet. Den holder så på referencen til vinduet og kan lukke vinduet.
Avatar billede ras2000 Nybegynder
19. september 2002 - 18:39 #10
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.
Avatar billede ras2000 Nybegynder
19. september 2002 - 18:49 #11
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.
Avatar billede 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.
Avatar billede 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!
Avatar billede Slettet bruger
20. september 2002 - 14:25 #14
Næ, fejlen opstod igen... Denne gang bare ved tredje forsøg! :)
Avatar billede 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);
}
Avatar billede ras2000 Nybegynder
20. september 2002 - 15:00 #16
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?
Avatar billede 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);
}
Avatar billede mikkel_breum Nybegynder
23. september 2002 - 20:34 #18
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?
Avatar billede ras2000 Nybegynder
26. september 2002 - 08:56 #19
Jep.
Avatar billede mikkel_breum Nybegynder
26. september 2002 - 19:09 #20
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.
Avatar billede Slettet bruger
27. september 2002 - 15:37 #21
Husk også at honorere ras2000! Det var ham, der kom med idéen!
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