17. oktober 2005 - 20:25Der er
12 kommentarer og 1 løsning
mozilla textrange og tables
OK den er lidt langhåret den her :-))
Context: mit hjemmeskræddede crossbrowser richtext editor projekt
Jeg har et dokument som er i designmode, som indeholder en tabel hvor mozilla/firefox så viser en markering ved at "outline" de pågældende celler. Fint nok, men står nu med det problem at jeg også har brug for at fjerne denne markering programmatisk, altså f.eks ved et kald til removeAllRanges() metoden, da jeg har min egen "markere-celle" funktion som også virker i internet explorer.
OK så langt så godt - jeg kan godt fjerne markeringen, og outline's (og de små ikoner til at fjerne og tilføje celler) forsvinder, men problemet er at browseren efterfølgende nægter at vælge tekst (med mindre man lige benytter tastaturet til at markere!?)...meeeget mærkeligt - faktisk så mærkeligt at jeg har været inde forbi bugzilla og tjekke om der skulle være oprettes en bug. Fandt dog ikke noget (eller også kan jeg ikke finde ud af bugzilla :-)
Så mit spøgsmål må være: kan man "deselecte" et dokument i designmode uden at disse problemer opstår?
Mon ikke du angriber problemet i den forkerte ende? Jeg ville nok i stedet sørge for, at event'en, der udløser Moz' egen markering, bliver canceled. Da jeg ikke kan se koden, er det svært at komme det nærmere
Du har en pointe...og det er ret enkelt at forklare hvad der foregår, jeg kun lytter nemlig kun efter mousedown og mouseup på selve dokumentet. Mousedown registrerer en variabel, _fromElm, og mouseup _toElm. Her opstår, så vidt jeg kan se, problemet: på den ene side vil jeg gerne tillade folk at vælge tekst og andet indhold, *også selvom markeringen starter inde i en tabel*, men på den anden side kan jeg først være sikker på at der er tale om en tabel-markering det øjeblik en mousedown efterfølges af mouseup. Og på det tidspunkt kan jeg ikke cancel'e mousedown eventen.
Ja nemlig, for at lige at citere mig selv: meeeget mærkeligt...
Faktisk kan man godt selecte tekst, men tjek lige fremgangsmetoden: man skal dobbeltklikke dokumentet (for at skabe en markering), og efterfølgende bruge en af piletasterne til at skubbe "kareten" i gang ;-). *Så* kan du bruge musen til at vælge tekst igen. Det lyder altså som en bug...
Jeg smider lige et svar til mig selv! jeg har ikke fundet en løsning, men en workaround er det da blevet til:
Den markering som firefox laver er tegnet med en XOR rotation af farverne, så den altid bliver negativ (blå hvis baggrunden er rød osv.). Derfor fandt jeg på altid at give kanten en ren hvid farve, og vupti! Nu kan jeg ikke længere se markeringen, selvom jeg ved den er der...:-)
Jeg har heller ikke fundet forklaringen. I det hele taget er der en del ting, jeg meget gerne så implementeret i Gecko's range- selection-model. F.eks. skodder det voldsomt, man ikke kan selecte tekst programmatisk :o|
Faktisk synes den omsiggribende FF-begejstring ikke at grunde sig i viden om FF. Den har ikke blot seriøse mangler - den har også rigtig mange bugs ... og sikkerhedsmæssigt er den ikke stort bedre end IE - nærmere tværtimod.
Det med textrange er kun delvist rigtigt - der er mange funktioner der mangler, men man har altså flere muligheder når man skal selecte tekst. For det første så har FF en window.find() funktion á la IE's findText(), og er man klar på lidt mere avanceret kode så kan man lave en Node.prototype (opdagede jeg så sent som i forgårs). Se hvordan her: http://www.codingforums.com/archive/index.php/t-1683.html
Synes godt om
Ny brugerNybegynder
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.