Avatar billede monkeysee Nybegynder
17. oktober 2005 - 20:25 Der 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?

Venter i spændsel på alle svar + kommentarer!!
Avatar billede monkeysee Nybegynder
17. oktober 2005 - 20:26 #1
P.S: Supergod artikel om emnet:
http://www.dotvoid.com/view.php?id=11
Avatar billede olebole Juniormester
17. oktober 2005 - 20:38 #2
Avatar billede monkeysee Nybegynder
17. oktober 2005 - 20:55 #3
>>> olebole: hvordan kan det være at removeAllRanges() ikke er nævnt i mozilla's egen dokumentation? Er det en firefox-only funktion  ?

Se den artikel jeg linkede til, for at forstå hvad jeg mener..
Avatar billede olebole Juniormester
17. oktober 2005 - 22:36 #4
Hvilket objekt skulle den metode ligge på?
Avatar billede monkeysee Nybegynder
17. oktober 2005 - 22:37 #5
Glem det sidste jeg skrev, det er selvfølgelig en del af mozilla...
http://mozref.com/reference/objects/Selection

Men jeg er nået til det samme (uønskede) resultat ved at bruge removeRange metoden som removeAllRanges. Hvad kan det mon skyldes?
Avatar billede olebole Juniormester
17. oktober 2005 - 22:43 #6
hehe ... jeg fandt den samtidigt  :)

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
Avatar billede monkeysee Nybegynder
17. oktober 2005 - 23:02 #7
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.
Avatar billede olebole Juniormester
18. oktober 2005 - 00:02 #8
Det lyder umiddelbart sært, at du efterfølgende ikke skulle kunne selecte tekst med musen ... _meget_ sært  :)

Det kan være, jeg når at teste lidt senere
Avatar billede monkeysee Nybegynder
18. oktober 2005 - 14:20 #9
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...
Avatar billede monkeysee Nybegynder
18. oktober 2005 - 14:29 #10
Måske skulle man foreslå de gode moz-developers at deres designmode (http://developer.mozilla.org/en/docs/Rich-Text_Editing_in_Mozilla:Class_xbDesignMode) foruden den eksisterende setCSSCreation() (som styrer hvorvidt man ønsker at formattere indhold med HTML eller CSS), har en metode som jo passende kunne hedde useTableHelpers()...

Den første kan man styre via script, og overtrumfer faktisk indstillingen i about:config.
Avatar billede monkeysee Nybegynder
19. oktober 2005 - 22:43 #11
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...:-)
Avatar billede olebole Juniormester
19. oktober 2005 - 23:01 #12
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.
Avatar billede monkeysee Nybegynder
20. oktober 2005 - 18:00 #13
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
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