Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

GC w Firefoksie

Generowana zawartość w Firefoksie nie jest dobrze obsługiwana. Dodanego w ten sposób tekstu albo obrazków nie sposób zaznaczyć, znaleźć w DOM ani wypozycjonować. Społeczność webdeveloperów od dawna wśród swoich zachcianek wymienia jej poprawną implementację, za przykład której podaje się Operę.

Możliwe, że w następnym Firefoksie i Gecko 1.9 będzie lepiej - tymczasem już dziś możemy cieszyć się wolną od poważnych błędów generowaną zawartością - napisałem skrypt w XBL pozwalający uwolnić się od ograniczeń Firefoksa. Dodanie go do strony jest naprawdę proste, a działanie proste i szybkie.

Przykład: strona wykorzystująca pozycjonowanie GC:

Bugged

Czy to możliwe bez setek modyfikacji i dostosowywania CSS oraz spadku szybkości? Bez obaw, wszystko dzieje się pod maską Firefoksa. Oto kroki do wykonania:

  1. Krok 1. Ściągnij plik moz-gcontent-fix.xbl, zapisz go w katalogu z CSS.

  2. Krok 2. Zlokalizuj w swoim CSS pseudoelementy, których wygląd chcesz poprawić. Przykład: #wrapper::before { … }

  3. Krok 3. Dodaj gdziekolwiek taki sam selektor, ale bez pseudoelementów GC. Przykład: #wrapper { … }

  4. Krok 4. Dopisz do niego regułę -moz-binding: url(moz-gcontent-fix.xbl#XBLDocument).

  5. Krok 5. Powtórz kroki 2 i 3 tyle razy, ile potrzebujesz poprawek GC.

  6. Krok 6. Odśwież stronę. Ciesz się poprawioną implementacją GC. :-)

Fixed

Co robi skrypt? Krótko mówiąc zamienia wodę w wino. ;) A na serio wyłapuje w arkuszach stylów (dowolnie podpiętych) reguły CSS generowanej zawartości dla elementów z których jest wywoływany. Tworzy w tych elementach spany, wypełnia je zawartością (obsługuje kombinacje ciągów znakowych, attr(), url()) i zmienia reguły CSS, aby wskazywały na te nowe elementy.

Wszystko byłoby prostsze i szybsze, gdyby nie nieobecność pseudoelementów w DOM. W skrypcie znajduje się dużo hacków, powtarzania kodu i paskudnych workaroundów, ale sposób w jaki radzi sobie Gecko z GC jest śmieszny.

Znane błędy:

  • Czasem dziedziczone są własności CSS. Muszę znaleźć lepszą metodę na nazewnictwo klas dla tych spanów.

  • Nie można łączyć selektorów GC, a później odwołać się do nich osobno.

Koderów zachęcam do poprawek, skrypt może być jeszcze lepszy i szybszy, jestem o tym przekonany. JavaScript można wyjąć z XML i wstawić za pomocą script do dokumentu - prostsze debugowanie.

Całkiem możliwe, że znajdziecie sposób na rozwalenie skryptu albo odstępstwa od specyfikacji. Tylko napiszcie mi o tym proszę, może da się to i owo poprawić. ;-)

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 02 lutego 2007 o 04:03

Kategorie: JavaScript & DOM, XML, XSL, XUL...

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. Ja na razie wole zostawić content tym organom, które odpowiadają za widok ( szablony wraz z danymi z bazy ).

    ::before i ::after zostawiam sobie do hackowania ;)

    Ale dzięki za posta – Przyda się na pewno!

  2. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    Gratulacje! Twoj kalkulator Emów jest na CSS Beauty.

    Respect:)

    Grzesiek

  3. Właśnie widzę… ciekawe ile mi wejść stuknie… sprawdzę jutro w GA. ;-)

    No ale bez offtopiku, czekam na komentarze dotyczące mojego hacka. :D

  4. Twój em calculator w ogóle jest linkowany w wielu poczytnych miejscach (najlepsze wyniki pokazuje wyszukiwarka live.com) :) Gratuluję. A ten hack też niezły. Powinieneś założyć sobie blog w en i opisywać te wszystkie sztuczki.

  5. wiem, ze to nie to samo, ale trzeba przyznac – smiesznie sie czyta o musie hackowania nie tylko IE, ale wielkiego Firefoxa :)

  6. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    taki mały OT: gratuluję nagrody :)

  7. btw: ja mam problemy z generowaną zawartością w Operze, ale to może kiedyś na priv sie zgłoszę

  8. „Generowana zawartość w Firefoksie nie jest dobrze obsługiwana. Dodanego w ten sposób tekstu albo obrazków nie sposób zaznaczyć, znaleźć w DOM ani wypozycjonować.”

    AFAIK zgodnie ze specyfikacją generowana zawartość nie powinna być częścią DOM.

  9. Ancestor: Chodziło mi o to, że powinno zadziałać

    var s = document.defaultView.getComputedStyle(elem, ':before');
    var c = s.getPropertyValue('content');
    

    Ani jedno ani drugie nie działa, stąd te cuda na kiju z iterowaniem po arkuszach stylów. ;-)

    Bellois & GiM: Dziękuję. :)

    shw: Nic nie jest doskonałe. ;)

  10. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    to jeszcze tutaj – gratulacje bloggerze roku :) w pełni zasłużona nagroda.

  11. No gorzej to być nie mogło.
    XBL + F-fox = IE + HTC :x

  12. Shaitan [D4] 12 02 lutego 2007, 18:20

    Gratuluję i informacji na cssbeauty i nagrody w konkursie Bloggera Roku !
    (Tak, też głosowałem ;))

    A news fajny, aczkolwiek ja się staram ::before i ::after unikać w miarę możliwości. Bo IE.

  13. Ancestor 13 02 lutego 2007, 18:54

    @liviopl

    No gorzej to być nie mogło.
    XBL + F-fox = IE + HTC :x

    Eee tam, bez przesady. Po pierwsze to tylko hack, a po drugie XBL trudno porównywać z HTC – to nie jest zamknięta technologia Mozilli:

    http://www.w3.org/TR/xbl/
    http://www.w3.org/TR/sXBL/

  14. Hmm, paczowanie IE to rozumiem, ale Fx to nie wiem – jakoś tak nie godzi się ;)

    @Ancestor
    http://www.w3.org/TR/NOTE-HTMLComponents

    taki żarcik ;)

  15. Hehe, może i się nie godzi, ale błąd z listami / zawartością blokową i błędy GC są cholernie denerwujące.

    Shaitan [D4], losamorales: Dzięki. :>

  16. @Riddle można gdzieś wyczytać coś o postępach prac nad GC? Byłoby dobrze, gdybyśmy znaleźli to już w Gecko 1.9/Fx 3.0.

  17. Shaitan [D4] 17 03 lutego 2007, 23:57

    (Komentarz zmodyfikowany 04.02.2007 o 00:06)

    btw, interesujacy bug w twoim kodzie js. zaznacz sobie jakikolwiek komentarz i wcisnij na cytowanie w innym ;>

  18. Ancestor 18 04 lutego 2007, 13:47

    @Zajec
    Pozwolę sobie wyręczyć Riddle’a: Bug 12460

    Nie ma on zbyt wysokiego priorytetu i nie zapowiada się, aby został naprawiony w Gecko 1.9, chyba, że znajdzie się jakiś zainteresowany wolontariusz.

  19. @Ancestor dzięki i… szkoda.

  20. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    Informuje ze jestes jednym z kandydatow do tytulu Bloggera roku :)

    http://blogroku.polskiblogger.pl/glosowanie/

  21. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    badboy – kolejny konkurs? To juz 3 w tym kwartale

  22. (Komentarz zmodyfikowany 06.02.2007 o 19:24)

    Każdy z nas może sobie zrobić konkurs… Wiadomosci24 też sobie taki zrobiły :)

  23. Dobry i przydatny artykuł :-).
    btw. Dlaczego nie można podać URL do swojej strony, tylko jest link do joggera?

    edit: wcześniej mi się coś źle napisało ;)

  24. (Komentarz zmodyfikowany 06.02.2007 o 19:23)

    Ku Klux Klan?

  25. (Komentarz zmodyfikowany 19.08.2007 o 15:10)

    OK, już wiem. Kiedy jestem zalogowany na jogger.pl to link jest do mojego joggera i mogę edytować komentarze… Sprytnie :-P
    Sorry za offtopic.

  26. Riddle dzięki wielkie! Potrzebuje, bo chcę zrobić szablon z użyciem after i before, a nie wiedziałem, że FF tego nie obsługuje za dobrze.

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.