Avatar billede steen Nybegynder
14. november 2003 - 13:15 Der er 14 kommentarer og
1 løsning

iframe og focus

På vores Intranet har jeg en iframe et godt stykke ned ad siden, hvori jeg henter indhold fra en ekstern service. Problemet er, at denne iframe tager focus. Det må den ikke, og jeg kan ikke editere i indholdet af iframen, idet indholdet kommer andetsteds fra. Hvad kan jeg gøre?
Avatar billede roenving Novice
14. november 2003 - 14:07 #1
Start en funktion i din side, som med jævne mellemrum overfører fokus til sig selv ...

Kedelig løsning hvis folk skal skrive noget som tager bare lidt tid, men den eneste mulige !-)
Avatar billede olebole Juniormester
14. november 2003 - 19:56 #2
<ole>

"... den eneste mulige" er jo store ord, roenving  ;o)

<script type="text/JavaScript">
function checkForFocus(fr) {
    if ( fr.readyState=="complete" ) {
        setTimeout("document.getElementById('top').focus()",10);
    }
}
</script>

<input type="text" id="top" style="position:absolute;top:-5px;height:0px;width:0px;border:0px none">
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<iframe src="http://www.google.com" onreadystatechange="checkForFocus(this)"></iframe>

/mvh
</bole>
Avatar billede roenving Novice
15. november 2003 - 01:01 #3
-- jeg tog jo mit udgangspunkt i en cross-browser-løsning, så jeg medregnede ikke onreadystatechange !-)
Avatar billede olebole Juniormester
15. november 2003 - 01:25 #4
'Intranet' plejer at være synonymt med 'IE/Win', derfor onreadystatechange  ;o)
Intranet og admin-moduler er vel, hvad der retfærdiggør eksistensen af IE ... nåja - og så lige det, at hele web-sikkerheds-branchen jo også skal have smør under laksen  :D
/mvh
Avatar billede roenving Novice
20. november 2003 - 15:45 #5
*g*
Avatar billede olebole Juniormester
02. december 2003 - 22:58 #6
Hvaaa' ... hjalp det, steen?
Avatar billede steen Nybegynder
31. januar 2004 - 17:22 #7
olebole >> har ikke glemt det... der går bare lige lidt tid før jeg skal på projektet igen.
Avatar billede steen Nybegynder
11. februar 2004 - 07:53 #8
Ole...

Dit script er genialt, men det er microsoft desværre også?

Jeg testede dit script, og det virker bare perfekt, men men men... så snart jeg smider kalenderdelen (OWA) ind i iframen tager den fokus. Og jeg kan jo desværre ikke rigtigt tilpasse koden fra microsoft, så jeg kom ikke videre. Man du skal ha nogle point for din insats, så hvis du lige gider svare ;-)

/Steen
Avatar billede steen Nybegynder
16. februar 2004 - 21:18 #9
ole... jeg vil frygteligt gerne af med 30 point :)

/Steen
Avatar billede steen Nybegynder
18. februar 2004 - 22:14 #10
OOOOLEEEE.... smid et svar ;-)
Avatar billede olebole Juniormester
19. februar 2004 - 22:53 #11
Sorry, Steen .... jeg har ikke været på E i laaang tid  :)

Hmmmm .... det er da noget skidt. Der er ikke noget, der kan give 'klokkerne' lange og uskønne dimensioner, som den slags fokus-problemer .... jeg _har_ været der  :o|

Nu ved jeg ikke helt, hvordan OWA-koden ser ud, men man kunne evt. snyde lidt ved at lave en MXL-http-request:

<script language="JScript">
var sURL = "http://www.google.com"
var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
oXMLHTTP.Open("GET",sURL,false);
oXMLHTTP.Send();
document.write(oXMLHTTP.ResponseText);
</script>

Her har du hele Google's side liggende i 'oXMLHTTP.ResponseText'. Man kunne jo så derefter lave noget RegExp-replace, der tilføjer noget 'sæt-fokus-på-parent-siden' i en evt. onload-handler i body-tag'et.
1. Er der allerede en onload-handler med en funktione, kunne man jo stoppe det ind efter funktionen - altså to funktioner, adskilt af semikolon.
2. Ligger der en onload-handler i en remote-JS fil, kan man indskrive et JS lige før '</body>'. Det skal være med en funktion, der trigges med en kort timeout.
3. Er der ikke nogen onload-handler, er der ingen probs ... du laver blot en.

Hermed undgår du nok ikke, iframe'en stjæler fokus et kort øjeblik - men det bliver lagt tilbage på hoved-siden igen.
Måske, man endda kunne lægge fokus tilbage til det rette form-element (hvis et sådan har fokus, når fokus 'stjæles'). Du kan i IE spørge, hvilket element, der er aktivt (har fokus) med 'document.activeElement'.

Prøv evt. - hvis du ikke kender denne property - at lege med en simpel side med en form og dette lille script:

<script>
function tellMe() {
  alert(document.activeElement.id);
}
window.onload("tellMe()", 2000);
</script>

Når siden loader, klikker du i et af formens felter og venter (disse skal naturligvis have hver deres id).

Jeg har ikke lige tid til at lave færdige eksempler, men håber, det har givet noget input at arbejde videre med ... alternativt, at du fik nogle ideer, du kan bruge til at løse noget andet - en anden gang  :)
/mvh
Avatar billede olebole Juniormester
19. februar 2004 - 22:58 #12
PS: Det kom måske ikke helt tydeligt ud  :)
Det med XML-http-request'en betød: Du importerer ikke siden i iframe'en. I stedet importerer du en side, der læser kalender-filen - manipulerer dens kode - og udskriver slut-koden.
Det giver som resultat original-koden _plus_ dine egne ændringer.

Håber, det blev trykket ud på en måde, der er forståeligt  :)
Avatar billede olebole Juniormester
19. februar 2004 - 23:50 #13
PPS: Kom lige i tanker om - det kan jo være, du helt kan udgå iframe'en, hvis du bruger XML-request'en (?)
Måske, du kan skrive kalenderen direkte ind på siden ... det kommer lidt anpå koden  :)
Avatar billede steen Nybegynder
20. februar 2004 - 09:08 #14
Ideen er god... jeg har tidligere arbejdet med XML-http, har bare ikke tænkt på det her. Når jeg "får lov igen" vil jeg kigge nærmere på din idé...

Tak for hjælpen
Avatar billede olebole Juniormester
20. februar 2004 - 11:37 #15
.... anytime  :)
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