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.

Informacje o wpisie

Napisał riddle 02 lutego 2007 o 04:03

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

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

  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.