Avatar billede oasen Nybegynder
05. januar 2003 - 07:55 Der er 24 kommentarer og
1 løsning

Load side i modervinduet uanset antallet af popups

Fra modervinduet (0) er det muligt at åbne et popupvindue (1). Herfra er det muligt igen at åbne en popup (2). Og derfra atter at åbne en (3) osv.
Mit problem er, at der ved tryk på en knap i en af disse popups skal loades en side i modervinduet:

<input type='button' onClick="opener.opener.top.location.href='side_i_modervindue.htm';window.close();">

Ovenstående kode fungerer kun fra popup 2. Ellers bliver siden åbnet i en af de forrige popups. Jeg troede ellers, at "top" angav, at der var tale om modervinduet.
Så mit spørgsmål er, hvad jeg skal skrive for at siden ALTID vil blive åbnet i modervinduet, uanset hvor mange popups, der er åbnet og i hvilken rækkefølge.

Og så søger jeg i øvrigt et sted på dansk, der fortæller lidt om popupvinduer i det hele taget (navngivning, hierarkiet o.lign.)
Avatar billede thesurfer Nybegynder
05. januar 2003 - 08:07 #1
kan du ikke bare nøjes med top.location.href istedet for opener.opener.top.location.href ?

/theSurfer.
Avatar billede oasen Nybegynder
05. januar 2003 - 08:10 #2
Nææ... så er der overhovedet intet, der virker (bortset fra lukning af vinduet)...
Avatar billede thesurfer Nybegynder
05. januar 2003 - 08:14 #3
en anden løsning (kald det en fusker løsning hvis du vil)..

i index filen har du et frameset der loader din hovedside.. dvs der kun står 1 side i framesettet.. den har så name="hovedside"..

derefter skriver du:

<input type='button' onClick="hovedside.location.href='side_i_modervindue.htm';window.close();">

Det var bare en ide.. du skal måske skrive noget andet istedet for hovedside.location.href.. måske opener.hovedside.location.href ..

prøv dig frem..

/theSurfer.
Avatar billede olebole Juniormester
05. januar 2003 - 08:14 #4
<ole>

top angiver det øverste window-objekt i et window-hieraki (et frames-hieraki) - men det kan du ikke bruge her.

Du skal tælle tilbage med et antal 'opener' - alt efter, hvormange vinduer, du har åbnet:
  opener.opener.opener.location.href = "side.html";
... hvis du har åbnet 3 vinduer.

/mvh
</bole>
Avatar billede olebole Juniormester
05. januar 2003 - 08:17 #5
Men pas iøvrigt på med at loade nye sider i dine popups. Hvis du gør det, taber du et opener-objekt og kæden brydes  ;o)
/mvh
Avatar billede oasen Nybegynder
05. januar 2003 - 08:19 #6
thesurfer --> Tak for det, men det må kunne gøres mere elegant, end jeg skal til at have gang i et frameset...

ole --> Ja, det anede mig nok, men hvordan finder jeg dog ud af, hvor mange vinduer, der er åbnet?
Avatar billede olebole Juniormester
05. januar 2003 - 08:38 #7
Hehe ... ja, det lyder unægtelig, som noget rod, du har gang i  :)

Hvis du kalder dit vindue for 'win', kan du prøve dette 'hack':
  var win = window.open( ........ );
  if (opener) win.opener = opener;

Så vil du altid kunne skifte den første side med:
  opener.location.href = "side.html";

Du skifter hele tiden det nye vindues opener-objekt ud med det opener-objekt, der tilhører det åbnende vindue (Læs det lige engang til og hold tungen lige i munden ... hehe).
Det aller første vindue har ikke noget opener-objekt ... derfor spørger jeg:
  if (opener) // hvis jeg har et, så giv mit eget opener-objekt videre til mit barn

/mvh
Avatar billede olebole Juniormester
05. januar 2003 - 09:16 #8
Denne løsning gør naturligvis at alle vinduerne (undtagen det aller første) har samme opener-objekt. Dvs, et vindue ikke kan gøre noget i det vindue, der åbnede det ... det kan kun gøre noget ved det aller første.

Hvis du samtidig vil beholde vinduernes egentlige opener-objekt (og altså kan pille ved det vindue, der åbnede det), kan du prøve med dette:
  var win = window.open( ........ );
  if (window.eva) win.eva = eva;
  else win.eva = window;

Nu vil hvert vindue have det aller første vindue liggende som 'eva' - og du kan i ethvert vindue skifte dokumentet i det aller første vindue med:
  eva.location.href = "side.html";
... smatidig med, hvert vindue beholder sit eget opener-objekt (det vindue, der åbnede det).

/mvh
Avatar billede olebole Juniormester
05. januar 2003 - 09:24 #9
'Metaforisk' forklaring:

// Jeg døber mit barn 'win':
  var win = window.open( ........ );

// Hvis jeg har en 'eva', så giv min 'eva' videre til mit barn:
  if (window.eva) win.eva = eva;

// Hvis ikke, så gør mig til mit barns 'eva':
  else win.eva = window;

Kun det aller første vindue har ingen 'eva' - og bliver derfor det første popup's 'eva'.
De efterfølgende vinduer 'arver' forbindelsen til det oprindelige vindue ved at få en klon (eller en stikling, hvis vi taler planter) af 'eva'.

Jeg håber, det kan gøre dine 'fuck-ups' til 'pop-ups'  ;o))
/mvh
Avatar billede Slettet bruger
05. januar 2003 - 13:05 #10
olebole>> Har du nogensinde overvejet at gå ind i digter-branchen? :)

Men jeg vil også lige forsøge mig!
Hvis du nu lægger denne lille stump i moder-vinduet:

<script>
mv = true;
</script>

... og sørger for at ingen af popup'erne har variabler ved navn "mv" i sig, så kan du forsøge dette (fra en vilkårlig popup):

<script>
function skiftModerVindue(url) {
side = self;
while (side.opener && !side.opener.mv)
    side = side.opener;
side.location.href = url;
}
</script>

Det burde vel virke. Hvis altså, som olebole siger, ingen af popup'erne har foretaget et sideskift endnu.
Avatar billede Slettet bruger
05. januar 2003 - 13:07 #11
olebole>> Kan du i øvrigt ikke overtales til at kigge på den her (?):
http://www.eksperten.dk/spm/297670
Avatar billede oasen Nybegynder
05. januar 2003 - 20:17 #12
Tak for alle svarene - og den gode forklaring :)
Jeg prøvede lige den første:

popupWin = window.open(........................)
if (opener) popupWin.opener = opener;

Det virker umiddelbart som det skal, men jeg skal lige teste det hele lidt nu...
Avatar billede olebole Juniormester
05. januar 2003 - 20:22 #13
oasen >> Jeg vil umiddelbart anbefale den anden (05/01-2003 09:16:53), hvor der ikke sker ulykker, hvis et vindue lukkes, el. lign.

Det er helt rigtigt, phoenixv  ;o)
Min løsning (05/01-2003 09:16:53) har dog som sagt den fordel, at den ikke er afhængig af, hvad du foretager dig i de andre popUps ... du kan sågar lukke dem. De vil altid have 'en kollektiv hukommelse, der fortæller dem, hvor de kommer fra'. De har alle en property på window-objektet (eva), der refererer til det oprindelige vindue.

Hvad angår det 'digteriske', så har jeg både undervist i studie- og lydteknik (min 'gamle' branche) og i JS og PHP - og det er min erfaring, at en metafor eller analogi til noget hverdagsagtigt ofte kan gøre forståelsen af et teknisk problem meget lettere.
Det sænker 'de tekniske parader' et øjeblik og problemløsningen glider ned, som en sjus gennem løgnhalsen. Hvis analogien virker, ser det egentlige problem helt anderledes ud bagefter  :)

En helt anden ting er så, at poesi og elegant/opfindsom kode har visse ting til fælles. Man skal være god til sproget (helt ned i detaljen) og evnen til at bruge sproget på en ny og uventet måde skal være stor. En sådan brug af sproget, kan i heldige tilfælde gøre sproget større, end det egentlig er.
Mange har i tidens løb grint ad mig, fordi jeg kan finde på at kalde en kodestump 'elegant' eller 'poetisk'. Meeeeeeeeen ... der er da også meget væsentlige forskelle på rigtig poesi og 'kode-poesi'  ;o)

Som poet er jeg en elendig copy-cat. Noget siger mig, vi har hørt historien om Eva som stammoderen før. Den har en anden vist brugt før mig  :D
Som 'kodepoet' gør jeg mit bedste, men blegner stadig i lyset af så mange andre  ;o)
/mvh
Avatar billede oasen Nybegynder
05. januar 2003 - 20:42 #14
Jamen, så vil jeg da også lige prøve det foreslag ;)
Avatar billede oasen Nybegynder
05. januar 2003 - 21:04 #15
Jeg roder rundt i det... Det virker fint nok med "eva", men som du selv siger, fungerer det ikke, hvis siden i et vindue bliver udskiftet. Og det er sådan set heller ikke meningen, for der skal altid åbnes NYE vinduer. Af og til - når der forsøges åbnet et nyt vindue - bliver siden loaded ind i et eksisterende i stedet. Jeg har en tæller på, der skal give vinduerne unikke navne, men det virker langt fra altid. Mon I kan se, hvad der er galt?

var teller = 0;
function PopWin(url,h,w) {
  var leftPos = null, topPos = null;

  if (top.screen){
    if (screen.width){
      leftPos = Math.round((screen.availWidth-w-15)/2);
      topPos = Math.round((screen.availHeight-h)/2);
    } else {    leftPos = 50
      topPos = 50
    }
  }
  popupWin = window.open(url, 'popup'+teller++, 'height=' + h + ',width=' + w + ',top=' + topPos + ',left=' + leftPos + ',scrollbars=no,resizable=no,status=no,toolbar=no,menubar=no,location=no')
  if (window.eva) popupWin.eva = eva;
  else popupWin.eva = window;
}
Avatar billede olebole Juniormester
05. januar 2003 - 21:28 #16
yups ... da denne kode ligger i alle popup-vinduer, starter alle teller're jo på "0" - og det første vindue, de hver især åbner får navnet "popup0" ... comprende?

Det, du kan gøre, er dette:

  var uniq = new Date().getTime();
  window.open( url, 'popup'+uniq, .............. );

Så lykkes det for dig  :)
/mvh
Avatar billede olebole Juniormester
05. januar 2003 - 21:35 #17
Personligt foretrækker jeg et timestamp, som det jeg lige har vist dig, men der er andre muligheder. Det gælder bare om at finde noget i dokumentet, der er uniqt for det påggældende dokument. Det kunne f.eks. være titlen:

  dow.open( url, 'popup'+document.title, .............. );

Mulighederne er mange  ;o)
/mvh
Avatar billede olebole Juniormester
05. januar 2003 - 21:36 #18
ups ... der røg et "win" i min copy/paste  :)

  window.open( url, 'popup'+document.title, .............. );
Avatar billede oasen Nybegynder
05. januar 2003 - 22:22 #19
Det med tidspunktet var da en glimrende idé. Det vil jeg lige lege med ;)
Avatar billede oasen Nybegynder
05. januar 2003 - 22:35 #20
Ja, nu virker alt, som det skal! Lækkert... Mange tak for hjælpen.

Lægger I/du et svar denne gang?
Avatar billede olebole Juniormester
05. januar 2003 - 23:06 #21
... anytime  :)
Jeg er ikke så interesseret i points, men spørg phoenixv og thesurfer, om ikke de vil splitte dem.
/mvh
Avatar billede oasen Nybegynder
05. januar 2003 - 23:46 #22
Ok - hørte I det? ;)
Avatar billede oasen Nybegynder
06. januar 2003 - 21:43 #23
Nå, men så gentager jeg lige;

olebole er ikke så interesseret i points, så jeg vil høre, om I (phoenixv og thesurfer) vil splitte dem...
Avatar billede oasen Nybegynder
07. januar 2003 - 13:01 #24
Det tager jeg som et nej...
Avatar billede Slettet bruger
07. januar 2003 - 16:56 #25
Det var det også! :)
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