Avatar billede willi Nybegynder
16. juni 2003 - 12:46 Der er 18 kommentarer og
1 løsning

Pop up target i en bestemt frame.

Jeg har, mener jeg, et udmærket script som skal bruges til login.

Det er ikke problemet at få det til at virke. Meget simpelt.
Men det target (window.open) skal være i en bestemt frame.
Det kan jeg simpelthen ikke se hvor skal stå.

<html>
<!-- Minus AutoDato -->
<head><title>Login</title>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
<script language="javascript">
// login version 4.2 june 2000
// Copy Right D10n...
// biab@iinet.net.au
// yobo42@hotmail.com
m=new Array();
var alpha="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghij";

function box(part,c,r)
{ prms=new Array(r,c); typ=new Array("rowspan=","colspan=");
  bx=new Array("<tr>","</tr>","</tr><tr>","</table>");
  clr=new Array("808080","c0c0c0","ffffff","000000");
  img='<img src="blank.gif" width=1 height=1>'; txt="";
  bx[bx.length]='<table border=0 cellpadding=0 cellspacing=0>';
  for(bi=0;bi<4;bi++)
    { for(bj=0;bj<2;bj++)
      bx[bx.length]='<td '+typ[bj]+(2*bi+prms[bj]);
      bx[bx.length]=' bgcolor="#'+clr[bi]+'">'+img+'</td>'; };
  ord=new Array();
  ord[0]=new Array(4,0,14,16,12,16,14,16,2,11,13,9,13,11,7,2,8,10,6,10,8,10,1);
  ord[1]=new Array(0,6,10,2,9,7,2,12,16,1,3);
  for(bi=0;bi<ord[part].length;bi++)
    txt+=bx[ord[part][bi]]+"\n";
  return txt; };

function check(frm)
{ var ary=new Array(0,1,1,7,9,8); f=new Array();
  for(i=0;i<3;i++)
    ary[i]=makehash(frm.elements[ary[i]].value,ary[i+3]);
  for(i=0;i<m.length;i++)
    if(m[i][0]==ary[0]) f[f.length]=i;
  if(f.length==0) { alert("Member Not Found"); return; };
  for(i=0;i<f.length;i++)
    if(m[f[i]][1]==ary[1])
    { ary[2]+=" ";
      for(j=2;j<m[f[i]].length;j++)
        { t=""; cnt=0;
          for(k=0;k<m[f[i]][j].length;k++)
          { c=m[f[i]][j].substring(k,k+1);
            a=alpha.indexOf(c,9);
            if(a>-1)
              { b=a-(ary[2].substring(cnt,cnt+1)*1);
                c=alpha.substring(b,b+1);
                cnt=(cnt+1)%(ary[2].length-1); };
            t+=c; };
          m[f[i]][j]=t; };
      if(m[f[i]].length>4)
        { wt='<html><body bgcolor="#bfbfbf"><center><form>'+box(0,1,1)+'<tr><td align="center">Destination<br>';
          wt+='<select size=5 onchange="window.opener.window.opener.location=this.options[this.selectedIndex].value; window.opener.close(); window.close();">';
          for(j=2;j<m[f[i]].length;j=j+2)
          wt+='<option value="'+m[f[i]][j+1]+'">'+m[f[i]][j];
          wt+='</select></td></tr>'+box(1,1,1)+'</form></body></html>';
          w=window.open("","ls","width=150,height=150");
          w.document.write(wt); w.document.close(); }
      else { window.opener.location=m[f[i]][3]; window.close(); };
      return; };
  alert("Incorrect Password!");
};

function makehash(str,mult)
{ hash=0;
  for (j=0;j<str.length;j++)
    hash=hash*mult+alpha.indexOf(str.substring(j,j+1),0)+1;
  return hash; };
</script>
<script language="javascript" src="login.js"></script>
</head>
<body bgcolor="#bfbfbf">
<center>
<form name="l">
<script language="javascript">document.write(box(0,1,1));</script>
<tr><td align="center">Member Name:<br>
  <input type="text" name="mem" size=16><br>
  Password:<br>
  <input type="password" name="pass" size=16><br>
  <input type="button" value="Login" onclick="check(this.form);">
  <input type="button" value="Cancel" onclick="window.close();"></td></form></tr>
<script language="javascript">document.write(box(1,1,1));</script>
</form>
</body>
</html>
Avatar billede roenving Novice
16. juni 2003 - 12:55 #1
Hvis jeg har forstået dig ret, vil du have teksten ind i en frame i stedet for en popup ?-)

Lidt kortere (og dermed mere overskuelig) kunne du gøre det -- og med indbygget frame-skifte:

      if(m[f[i]].length>4)
        { wt='<html><body bgcolor="#bfbfbf"><center><form>'+box(0,1,1)+'<tr><td align="center">Destination<br>';
          wt+='<select size=5 onchange="opener.opener.top.NYFRAMENAVN.location=this.options[this.selectedIndex].value; opener.close(); window.close();">';
          for(j=2;j<m[f[i]].length;j=j+2)
          wt+='<option value="'+m[f[i]][j+1]+'">'+m[f[i]][j];
          wt+='</select></td></tr>'+box(1,1,1)+'</form></body></html>';
          w=window.open("","ls","width=150,height=150");
          w.document.write(wt); w.document.close(); }
      else { window.opener.location=m[f[i]][3]; window.close(); };
      return; };
Avatar billede willi Nybegynder
16. juni 2003 - 12:59 #2
Ikke helt roenving.
Når pop up vinduet er åbnet og der er indtastet korrekt bruger og password åbnes html siden som der gives adgang til.
Det er denne side jeg ønsker åbnet i en bestemt frame.

...håber det hjalp
Avatar billede roenving Novice
16. juni 2003 - 13:01 #3
-- jeg slettede ikke den første linje, fordi jeg godt ville forstå hvad du ville, men faktisk indeholder min ændring af din kode hvad du ønsker ...
Avatar billede roenving Novice
16. juni 2003 - 13:02 #4
-- se de store bogtaver ;O)
Avatar billede willi Nybegynder
16. juni 2003 - 13:12 #5
Ja.
Men så får jeg dette:
onchange="opener.opener.top.[3_2].location=this.options[this.selectedIndex].value;

Min frame hedder [3_2]

Det er vel ikke korrekt?
Avatar billede roenving Novice
16. juni 2003 - 13:16 #6
Uff framenavne med ulovlige javascript-tegn ...

prøv med:
opener.opener.top.frames['3_2'].location=this.options[this.selectedIndex].value
Avatar billede willi Nybegynder
16. juni 2003 - 13:36 #7
Nej. Det virker heller ikke.
Men der må da kunne laves en henvisning fra et pop up til en frame.
Avatar billede roenving Novice
16. juni 2003 - 14:14 #8
Så kig i koden på dit frameset-dokument og tæl hvilket nummer din frame har (den første har nummer 0) og brug nummeret som parameter i frames[] ...

-- der _kan_ være ged i det, så du må eksperimentere lidt, f.eks. hvis du har en iframe, for de tæller også med ;O)

Altså (den sjette):

opener.opener.top.frames[5].location=this.options[this.selectedIndex].value
Avatar billede willi Nybegynder
16. juni 2003 - 14:51 #9
Det...
Men jeg vender tilbage.
Avatar billede willi Nybegynder
18. juni 2003 - 11:02 #10
roenving.
Det virker ikke.
Scriptets "target" åbnes kun i den frame hvor linket som det blev åbnet med er.
Surt. Men det ser ikke ud som det kan lade sig gøre.
Avatar billede roenving Novice
18. juni 2003 - 12:24 #11
Men det er rigtigt, at der er to generationer af popups ?-)
Avatar billede willi Nybegynder
19. juni 2003 - 14:40 #12
KAN DET VIRKELIG IKKE LADE SIG GØRE !?!

> åbne pop-up fra link i en frame.
> åbne en side i [frameTest] fra en link i pop-up vinduet.

Ellers må jeg ty til at lukke dette, hvad jeg troede, var et enkelt spørgsmål
Avatar billede roenving Novice
19. juni 2003 - 15:11 #13
Jeg blev lige opmærksom på en krølle, som måske kan løse problemet:

wt+='<select size=5 onchange="opener.opener.top.NYFRAMENAVN.contentWindow.location=this.options[this.selectedIndex].value; opener.close(); window.close();">';

-- ville lige vise den -- jeg har ikke testet ...
Avatar billede willi Nybegynder
19. juni 2003 - 18:43 #14
Nej. Det nytter vist ikke.
Avatar billede willi Nybegynder
15. august 2003 - 18:09 #15
>roenving slutter. Men jeg synes du skal svarer. Du har fortjent de - omend få - point.
(ps. jeg troede jeg havde lukket spørgsmålet. Men kan ikke rigtig se forskel på fanerne)
Avatar billede roenving Novice
15. august 2003 - 20:08 #16
-- næ, den grønne og den blå kan godt snyde i nogle vinkler ...

-- og behold du bare dine points -- vi blev desværre ikke klogere !-)
Avatar billede willi Nybegynder
16. august 2003 - 10:39 #17
Ok. Tak for deltagelsen
Avatar billede willi Nybegynder
16. august 2003 - 10:59 #18
...Og held og lykke i eftermiddag!
Men hvordan klarer i det, når der end ikke er et sodavandsbryggeri, med som sponsor?
Avatar billede roenving Novice
17. august 2003 - 09:48 #19
*ss*
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