Avatar billede thesurfer Nybegynder
21. august 2005 - 14:58 Der er 22 kommentarer og
1 løsning

Fang den aktive (og ukendte) frame/ramme

Er det muligt at fange/finde den aktive frame/ramme, uden at kende navnet/henvisning til rammen?


Det skal bruges i browseren Opera ( http://www.opera.com/download ).

Jeg skal, via knap/bookmark(let), arbejde med den aktive frame/ramme, men uden at kende navnet/henvisning til den.

Jeg har nemlig en knap/bookmark(let) der hopper til bunden af siden.
Koden ser sådan ud:

java script:window.scrollTo(0,screen.height*10000);void(0)

Koden kan også afvikles direkte i adresse-baren.

Som sagt:
Det skal bare virke i Opera, da det kun skal bruges på min egen computer.

- Points kan evt sættes op, hvis det viser sig at være et kompliceret projekt.

Skriv lige, hvis det ikke er forståeligt..
Avatar billede roenving Novice
21. august 2005 - 15:02 #1
Hvis du trykker på en knap, vil den jo have fokus, ligesom den yderste frame vil have fokus, hvis du afvikler noget fra adresselinjen ...

-- er det også i et dokument, du selv laver ?-)

-- for så kunne man registrere hvilken frame, som får fokus og på den måde finde den !-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:10 #2
Det er ikke i et dokument, men i selve browseren.. dvs, en del af panelet/menuen/toolbaren..

Jeg ved godt, at framen hvor knappen er i, vil få fokus.. men det er i selve browseren..

Screenshot: http://thesurfer.users.whitehat.dk/img/exp_my_q/opera_toolbar.jpg

Toolbaren, med bookmark(lets der afvikler JavaScript kode, er markeret med en gul firkant.

/theSurfer
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:12 #3
Lige nu, bruger jeg "window.scrollTo...". Det virker jo på hele browser vinduet.

Hvis jeg skal bruge det på en frame, skal jeg bruge noget i stil med "top.FrameNavn.window.scrollTo..." ..

Men hvad nu, hvis jeg ikke kender "FrameNavn"? Så bliver jeg nødt til, at fange den aktive frame..

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 15:13 #4
Hvad med at bruge frames-collection ?-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:16 #5
Hvordan skal det bruges?


Jeg kan jo ikke bruge "window.frames[0]...", da jeg ikke kender "[0]".. der kan være et vilkårligt antal frames på en side..

Jeg kommer i tanke om et script, med noget actCol eller noget i den stil.. kan man ikke lave noget ligende..?

actCol tingsten virker sikkert kun, fordi man selv har direkte adgang til siden..

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 15:20 #6
Du kan jo køre en bookmarklet, som initialiserer en funktion, som gemmer det først !-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:21 #7
me is lost :-)
Hvordan mener du?

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 15:29 #8
Når du møder en side, hvor du tror, du vil bruge den kører du en bestemt bookmarklet, som påhæfter en funktion på alle frames !-)

Kører en tur igennem alle elementer i frames-collection, og sætter en funktion på, med normal javascript-notation:

for(i=0;window.frames.length>i;i++){
  window.frames[i].onfocus = function(){top.activeFrame = this;};
}

-- så kan du aflæse værdien af activeFrame, når du får brug for det !-)

-- jeg husker ikke præcis, hvornår det er nødvendigt at neste, men det er det sikkert, hvis du har framesets i (i)frames og/eller iframes i (i)frames !-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:47 #9
hmm..
Den burde skifte activeFrame til den man klikker på.. korrekt? Hvis ja, så virker det ikke helt..

activeFrame er altid den sidste frame..

/theSurfer
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:48 #10
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:52 #11
PS: min kode er:

java script:activeFrame.window.scrollTo(0,screen.height*10000);void(0)

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 15:56 #12
Tjah, jeg fik en http 400 på search-engine osv...

-- jeg har overhovedet ikke testet, så jeg ved ikke om det fungerer ...

-- og så ville jeg altid selv bruge top.activeFrame.scrollTo(), men da du alligevel får fat i noget, er det nok ikke det, som er fejle-kilden !-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:56 #13
Det ser ud til at virke fint, hvis jeg bruger "...[i].onclick = funct..."..

Altså med onclick i stedet for onfocus..

/theSurfer
Avatar billede thesurfer Nybegynder
21. august 2005 - 15:59 #14
Yes! :-)  Nu virker det fint :-)

Smid lige et svar :-)

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 16:00 #15
Hvordan så ?-)

Velbekomme '-)
Avatar billede thesurfer Nybegynder
21. august 2005 - 16:03 #16
Det virker, hvis jeg bruger onclick i steder for onfocus. Og "top" i "activeFrame.window..." er optionelt..

Nu skal jeg bare have lavet en IF-sætning, så samme bookmarklet virker, både når det er almindelige vinduer, og når der er frames.. :-)

Jeg tænkte på noget i stil med:

java script:if (top.activeFrame == undefined) { window.scrollTo(0,screen.height*10000); } else { top.activeFrame.window.scrollTo(0,screen.height*10000);}; void(0)

Hvad siger du til det?

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 16:07 #17
Den skulle der ikke være noget galt i ...

-- men activeFrame er allerede et window-objekt, som har en property, som er den selv, nemlig window, så stryg de ekstra bogstaver: top.activeFrame.scrollTo() !-)

-- og forkortes yderligere kan den godt:

java script:if (!top.activeFrame) { window.scrollTo(0,screen.height*10000); } else { top.activeFrame.scrollTo(0,screen.height*10000);}; void(0)
Avatar billede roenving Novice
21. august 2005 - 16:07 #18
-- og tak for point ;~}
Avatar billede thesurfer Nybegynder
21. august 2005 - 16:07 #19
Ser ud til at virke som det skal:

java script:for(i=0;window.frames.length>i;i++){    window.frames[i].onclick = function(){top.activeFrame = this;};  }; void(0)

og:

java script:if (top.activeFrame == undefined) { window.scrollTo(0,screen.height*10000); } else { top.activeFrame.window.scrollTo(0,screen.height*10000);}; void(0)


Kan man på nogen måde, kombinere de 2 ting, til 1 bookmarklet, så man kun skal klikke på 1 bookmarklet?

#1 looper jo alle frames igennem, og vil flytte focus/aktiveFrame til den sidste frame.. hvis #2 bliver afviklet direkte efter det, scrolles den sidste frame.. går jeg ud fra (har ikke testet..)..

/theSurfer
Avatar billede thesurfer Nybegynder
21. august 2005 - 16:08 #20
Jeg har nu rettet min jump-kode til den i 21/08-2005 16:07:09.

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 16:12 #21
Nej, kombinationen kan jo ikke virke, når du først aktiverer jump-tingen, når du vil hoppe, for så er der jo ikke initialiseret nogen activeFrame variabel forinden ...
Avatar billede thesurfer Nybegynder
21. august 2005 - 16:19 #22
Yes! Long live the Proxomiton :-)

Denne kode indsættes automatisk på ALLE websider (runtime) via proxy-programmet Proxomitron, før de min browseren:

<script type="text/JavaScript">for(i=0;top.window.frames.length>i;i++){    top.window.frames[i].onclick = function(){top.activeFrame = this;};  };</script>

Nu kan jeg nøjes med 1 klik.. :-)

Thanks for the help, mate :-)

/theSurfer
Avatar billede roenving Novice
21. august 2005 - 16:21 #23
Muy bueno !-)
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