piątek, 13 listopada 2009

GWT i Firefox 3.5 - problem z user agent

Czasami zdarza się, że nad jakimś problemem siedzimy dosyć długo a rozwiązanie jego jest wyjątkowe proste. Niestety dzisiaj kolejny raz przytrafiła mi się przykra niespodzianka.

Jednym ze sposobów przyspieszenia kompilacji projektu GWT jest obniżenie ilości permutacji. Można to osiągnąć poprzez kompilowanie kodu tylko dla wybranych przeglądarek (w idealnym świecie dla jednej) oraz kompilowanie tylko dla jednego języka.
Mój plik modułu dotychczas wyglądał tak :
<set-property name="user.agent" value="gecko,safari">
<!-- 
 <extend-property name="locale" values="pl" />
--> 

Czyli kompilowałem tylko dla domyślnego języka, natomiast wynik kompilacji chciałem oglądać w Google Chrome. Oczywiście większość osób używa Firefoksa i zapewne wystarczy im ustawić user.agent na gecko, (dzięki temu osiągną ilość permutacji równą 1). Ja na co dzień używam Chrome i dlatego dodatkowa permutacja mi nie przeszkodziła. Wartość gecko musiałem zostawić gdyż na linuksie w hosted mode odpalany jest jakaś archaiczna Mozilla. Z Hosted Mode oczywiście nie chciałem zrezygnować. Dzięki temu mogłem pracować w hosted mode a wyniki kompilacji oglądać zarówno w Chrome jak i Firefox.

Tak było do dzisiaj, wprowadzałem ostatnio sporo zmian do systemu (przejście między innymi na mvp oraz użycie gin) i chciałem po kompilacji zobaczyć jak aplikacja pracuje w Firefoksie, niestety aplikacja nie ładowała się.  Na początku oczywiście zacząłem dociekać czy żadna z wprowadzonych ostatnio zmian nie ma wpływu na taki stan rzeczy. Najdziwniejsze natomiast było to że w hosted mode działała poprawnie, podobnie w Chrome a tylko w Firefoxie nie działała. Odpaliłem więc Firebuga i znalazłem w zakładce sieć informacje że Firefoks próbuje ściągnąć plik z servera z końcówką unknown, wtedy było jasne że nie może ściągnąc pliku *****.cache.html, ba dla tego user agenta nie ma takiego pliku skompilowanego.
Zajrzałem więc do UserAgent.gwt.xml w źródłach gwt i okazało się że dla silnika gecko są dwa ustawienia gecko i gecko1_8. Wystarczyło że dodałem w konfiguracji mojego modułu gecko1_8 i mogłem zobaczyć działanie aplikacji w Firefoksie.

A dlaczego te wszystkie kłopoty otóż podczas aktualizacji Ubuntu do wersji 9.10 (Karmic Koala) aktualizowany jest również Firefox do wersji 3.5. A on działa na silniku gecko 1.9.1 w związku z tym dlatego należy ustawić gecko1_8 bo oznacza on wszystkie silniki od silnika gecko 1.8 wzwyż.

Teraz jak sprawdziłem jak działa pod Firefoksem wróciłem do ustawień user.agent=gecko,safari i cieszę się tylko dwoma permutacjami. Pozostaje tylko czekać na gwt w wersji 2.0 w której to zaimplementowano Out of Process Hosted Mode i nie będę musiał nawet kompilować do gecko aby używać hosted mode.

Brak komentarzy:

Prześlij komentarz