05. januar 2003 - 07:55Der 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:
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.)
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.
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
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).
// 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
Synes godt om
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.
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
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;
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, .............. );
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:
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.