Avatar billede pedepede Nybegynder
13. juni 2003 - 13:07 Der er 16 kommentarer og
1 løsning

Adressering af vinduer

Hvis man har flere vinduer åbnet på en gang, hvordan adresser man så de enkelte. Vinduerne er ikke åbnet med en open(), så jeg har forsøgt at give vinduerne navne ved at skrive window.name = "etellerandet" på alle sider, men når jeg henviser til dem med fx. etellerandet.focus() får jeg en fejl om at objektet ikke er defineret. Er det stien der fejler noget eller hur?
Pede
Avatar billede pelkjaer Nybegynder
13. juni 2003 - 13:11 #1
Hvordan er de så åbnet, hvis du ikke har brugt window.open()?

Det er der problemet ligger, du skal navngive det i et opener script.
Avatar billede pedepede Nybegynder
13. juni 2003 - 13:18 #2
Ved fx at linke til et target der ikke eksisterer. Og det er helt bevidst. Jeg vil ikke bruge opener da jeg helst ikke vil have åbnet et nyt vindue hvis der allerede er et andet åbnet.
Kan det så ikke lade sig gøre? Jeg får jo tildelt vinduerne navne ved at skrive window.name ="xxxxx" istedet
Avatar billede pelkjaer Nybegynder
13. juni 2003 - 13:20 #3
Nej det kan ikke - hvorfra skulle et andet vindue kende navnet.

Ved brug af window.open kan du da bare tjekke om der er et åbent i forvejen.
Avatar billede Slettet bruger
13. juni 2003 - 13:22 #4
I det vindue, som du åbner, indsætter du bare denne kode:

<script>
opener.nytVindue = self;
</script>

Fra siden, der åbner vinduet, kan du derefter tilgå det nye vindue med "nytVindue", fx:

<a href="#" onClick="nytVindue.location.href = 'din_side.html'; return false;">Bla2</a>
Avatar billede roenving Novice
13. juni 2003 - 13:27 #5
Hvis du bruger window.open('xxxx', 'mitVindue') flere gange vil det blive ved med at være det samme vindue -- browseren vil IKKE åbne et nyt hver gang, prøv f.eks.:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>TÆL NED -- og åbn ...</TITLE>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
<SCRIPT LANGUAGE="javascript">

var title = new Array();
var links = new Array();
var delay = new Array();
title[0]="E*";
links[0]="http://www.eksperten.dk/";
delay[0]=60;
title[1]="HoTMaiL";
links[1]="http://www.hotmail.com";
delay[1]=120;

var nextLoad = new Array();
var ids = 0;
var nu = new Date().getTime();
var minTid = 0;
var minTitle = "";

function checkUrl(url){
    if (url.indexOf("http://")==0)return url;
    if (url.indexOf("www.")==0)return "http://"+url;
    regexp=/\w+\.\w+\.\w{2,}(\/\w+)*/i;
    if (regexp.test(url))return "http://"+url;
    return "/";
}

function startTael() {
    for (i=0;links.length>i;i++){
        links[i]=checkUrl(links[i]);
        eval('document.minForm.titel'+i+'.value=title[i]');
        eval('document.minForm.link'+i+'.value=links[i]');
        eval('document.minForm.tid'+i+'.value=delay[i]');
        nextLoad[i]= 0;
    }
       
  ids=setInterval(taelNed,1000);
}

function stopTael(){
    clearInterval(ids);
}

function startNyTael(){
    clearInterval(ids);
    var j = 0;
    delete title;
    delete links;
    delete delay;
    links = new Array();
    delay = new Array();
   
    for (var i=0;5>i;i++){
        if (eval('document.minForm.link'+i+'.value')!=""){
            title[j] = eval('document.minForm.titel'+i+'.value');
            links[j] = checkUrl(eval('document.minForm.link'+i+'.value'));
            delay[j] = eval('document.minForm.tid'+i+'.value');
            if (5>parseInt(delay[j]))delay[j] = 60;
            j++;
        }
    }
    for (i=0;links.length>i;i++){
        eval('document.minForm.titel'+i+'.value=title[i]');
        eval('document.minForm.link'+i+'.value=links[i]');
        eval('document.minForm.tid'+i+'.value=delay[i]');
        nextLoad[i]= 0;
    }
    for (j=i;5>j;j++){
        eval('document.minForm.titel'+j+'.value=""');
        eval('document.minForm.link'+j+'.value=""');
        eval('document.minForm.tid'+j+'.value=""');
        nextLoad[j]= 0;
    }
  ids=setInterval(taelNed,1000);
}

function taelNed(){
  nu = new Date().getTime();
  minTid = 1000000000;
  for(i=0;links.length>i;i++){
      msek = nextLoad[i] - nu;
      var sek = Math.floor(msek/1000);
      eval('document.getElementById("minSpan'+i+'").innerText=sek+" s."');
      if(minTid>sek){
          minTid = sek;
          minTitle = title[i];
      }

      if (0>=msek){
        if (links[i]!="/")eval("window.open(links["+i+"],'NySide"+i+"')");
        if (nextLoad[i]==0){
            nextLoad[i] = nu + Math.floor(Math.random()*delay[i]*1000)
        }else{
            nextLoad[i] = nu+delay[i]*1000;
        }
      }
    }
    document.title=minTid+" s. til "+minTitle;

}

</SCRIPT>
</HEAD>

<BODY ONLOAD='startTael()'>
<H1>Opdatering af vinduer</H1>
<FORM NAME="minForm">
<TABLE BORDER="2">
    <TR>
        <TD ALIGN="center">
            <H3>
                Titel
            </H3>
        </TD>
        <TD ALIGN="center">
            <H3>
                Links der skal åbnes
            </H3>
        </TD>
        <TD ALIGN="center">
            <H3>
                Tid mellem ny load (sek.)
            </H3>
        </TD>
    </TR>
    <TR>
        <TD>
            &nbsp;<INPUT NAME="titel0" SIZE="15">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="link0" SIZE="50">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="tid0" SIZE="5" STYLE="text-align:right">&nbsp;s. -- næste om:&nbsp;<SPAN ID="minSpan0"></SPAN>
        </TD>
    </TR>
    <TR>
        <TD>
            &nbsp;<INPUT NAME="titel1" SIZE="15">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="link1" SIZE="50">&nbsp;
        </TD>
        <TD>
            &nbsp;<INPUT NAME="tid1" SIZE="5"  STYLE="text-align:right">&nbsp;s. -- næste om:&nbsp;<SPAN ID="minSpan1"></SPAN>
        </TD>
    </TR>
    <TR>
        <TD>
            &nbsp;<INPUT NAME="titel2" SIZE="15">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="link2" SIZE="50">&nbsp;
        </TD>
        <TD>
            &nbsp;<INPUT NAME="tid2" SIZE="5"  STYLE="text-align:right">&nbsp;s. -- næste om:&nbsp;<SPAN ID="minSpan2"></SPAN>
        </TD>
    </TR>
    <TR>
        <TD>
            &nbsp;<INPUT NAME="titel3" SIZE="15">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="link3" SIZE="50">&nbsp;
        </TD>
        <TD>
            &nbsp;<INPUT NAME="tid3" SIZE="5"  STYLE="text-align:right">&nbsp;s. -- næste om:&nbsp;<SPAN ID="minSpan3"></SPAN>
        </TD>
    </TR>
    <TR>
        <TD>
            &nbsp;<INPUT NAME="titel4" SIZE="15">
        </TD>
        <TD>
            &nbsp;<INPUT NAME="link4" SIZE="50">&nbsp;
        </TD>
        <TD>
            &nbsp;<INPUT NAME="tid4" SIZE="5"  STYLE="text-align:right">&nbsp;s. -- næste om:&nbsp;<SPAN ID="minSpan4"></SPAN>
        </TD>
    </TR>
    <TR>
        <TD>&nbsp;</TD>
        <TD COLSPAN="2">
            <INPUT TYPE="button" VALUE="Start ny" onclick="startNyTael()">&nbsp;&nbsp;<INPUT TYPE="button" VALUE="Stop opdatering" onclick="stopTael()">&nbsp;&nbsp;<INPUT TYPE="button" VALUE="checkUrl" onclick="this.value=checkUrl(this.form.link4.value)">
</TABLE>
</FORM>
</BODY>
</HTML>
Avatar billede pedepede Nybegynder
13. juni 2003 - 14:04 #6
pelkjaer: På en eller anden måde kan den anden vindue nu godt "se" den første. Jeg får nemlig det rigtige navn returneret hvis jeg skriver en alert(window.name) fra den anden.

phoenixv: Tester lige!

roenving: Nej, det ved jeg godt. Men i dette tilfælde kan antallet af vinduer begrænses fra 3 til 2, hvilket jeg tror giver en bedre oplevelse.
Avatar billede pedepede Nybegynder
13. juni 2003 - 14:31 #7
Phoenixv: Jeg får sq fejl... :O(

Case og præcisering: Side A åbnes fra adresselinien og indeholder framet main. Side A åbner et nyt vindue B. Fra B skal der loades et nyt indhold i framet main på Side A.
Dette kan sagtens lade sig med et almindeligt link og target=main, men hvordan får jeg samtidig fokus på Side A??
Avatar billede roenving Novice
13. juni 2003 - 14:39 #8
opener.focus()
Avatar billede pedepede Nybegynder
13. juni 2003 - 15:01 #9
roenving: Altså <a href="MitLink.htm" target="main" onClick="opener.focus()"
?
Det synes jeg ikke virker?!?!!? Jeg kender ikke noget til openerfunktionen....
Avatar billede roenving Novice
13. juni 2003 - 15:08 #10
Men dit link virker ?-)
Avatar billede Slettet bruger
14. juni 2003 - 10:17 #11
Så er det bare:

<a href="#" onClick="opener.location.href = 'din_side.html'; opener.focus(); return false;">Link</a>

Forudsat, at B ikke har skiftet url, efter den blev åbnet.
Avatar billede pedepede Nybegynder
16. juni 2003 - 09:43 #12
phoenixv: Jepsen!! Ærgeligt det med at siden ikke må skifte url, men ellers virker det jo fint.

Øh... Points??? Mangler et "Svar"...
Avatar billede Slettet bruger
16. juni 2003 - 12:00 #13
Det får du her.
Avatar billede Slettet bruger
16. juni 2003 - 12:01 #14
Hvis siden behøver at skifte url, kan du evt. lave den som et frameset med en skjult frame, der indeholder en reference til den side, der åbner popup'en. Sig til, hvis du er interesseret. :)
Avatar billede pedepede Nybegynder
16. juni 2003 - 15:13 #15
Jo tak!! Hvis du lige kan hale sådan et script frem af godteposen, så er jeg da vældig interesseret!!
Avatar billede Slettet bruger
16. juni 2003 - 17:55 #16
Din popup skal bestå af et frameset (du behøver faktisk ikke en skjult frame):

<html>
<head>
</head>
<frameset rows="100%" framespacing="0" frameborder="0" border="0">
<frame src="din_side.html" scrolling="yes" />
</frameset>
</html>

På "din_side.html" kan du så gå videre til en anden side med et link. På den anden side skriver du bare:

<a href="#" onClick="parent.opener.location.href = 'http://www.something.com'; parent.opener.focus(); return false;">Skift</a>

... for at skifte URL på den side, der har åbnet popup'en!
Avatar billede pedepede Nybegynder
16. juni 2003 - 19:15 #17
Glimrende!! Mange tak.
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