2010-06-17 12 views
26

Czy istnieje api GWT, które powie mi, która wersja przeglądarki wykryła?Wykrywanie wersji przeglądarki za pomocą GWT?

Znalazłem lukę z obsługą wyrażenia regularnego IE7 i potrzebuję kodu wokół niektórych trudnych wyrażeń String.matches().

+1

Czy możesz opisać usterkę IE7? Co to jest przykładowe wyrażenie regularne i w jaki sposób IE7 robi to źle (a inne przeglądarki poprawnie to rozumieją)? Nie sądzę, że ma to wpływ na pytanie lub odpowiedź, po prostu byłoby miło mieć tę informację tutaj dla potomności. –

+0

Mam regex hasła, który pasuje do == true w każdej przeglądarce testowanej oprócz IE7. PASSWORD_REGEX = "((? =. * \\ d) (? =. * [Az]) (? =. * [AZ]). {8,24})" – Stevko

Odpowiedz

26

Można użyć GWT deferred binding using replacement i utworzyć dwie implementacje klasy, w której używasz regex.

Załóżmy na przykład, że twoja klasa nazywa się Parser i zawiera kod dla wszystkich przeglądarek internetowych z wyjątkiem IE7. Następnie można rozszerzyć Parser i utworzyć klasę ParserIE7 dla IE7. Następnie w pliku konfiguracyjnym modułu GWT można dodać:

<replace-with class="Parser"> 
    <when-type-is class="Parser"/> 
</replace-with> 

<replace-with class="ParserIE7"> 
    <when-type-is class="Parser" /> 
    <when-property-is name="user.agent" value="ie7"/> 
</replace-with> 

następnie wywołanie

Parser parser = GWT.create(Parser.class); 

powinien mieć odpowiednią (przeglądarka internetowa utrzymaniu) realizację Parser w parser zmiennej.

Możesz znaleźć więcej szczegółów here.

+0

+1 To jest poprawna odpowiedź, jeśli masz wiele zmian między różnymi analizatorami składni i chcesz zminimalizować ruch między serwerem a przeglądarką. –

26

Możesz wykryć rodzaj przeglądarki za pomocą poniższego kodu.

public static native String getUserAgent() /*-{ 
return navigator.userAgent.toLowerCase(); 
}-*/; 

Następnie można wywołać tę funkcję i sprawdzić typ przeglądarki. Na przykład poniższy kod decyduje o tym, czy jest to przeglądarka internetowa czy nie.

if(getUserAgent().contains("msie")) 
{ 
///////// Write your code for ie 
} 

This page ma agenta użytkownika dla prawie każdej przeglądarki znanej człowiekowi.

+26

Co z ['Window.Navigator .getUserAgent() '] (http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/Window.Navigator.html#getUserAgent%28%29) zamiast tego Twojej metody JSNI? –

+0

Skąd mam wiedzieć, czy przeglądarka to "Mozilla Fire Fox/Safari/Opera/Chrome", czy nie. możesz umieścić ten sam warunek dla innych przeglądarek, tak jak w przypadku IE. – Jagadeesh

+5

Powoduje to również zwrócenie ** false ** dla ** IE11 **, ponieważ jest to ciąg userAgent nie zawierający 'msie'. Należy użyć 'zawiera (" msie ") || zawiera ("trójząb") 'dopasowanie ** IE11 **. – Yura

7

Jeśli używasz biblioteki GXT można użyć GXT .isChrome wykryć chrom i można znaleźć różnych członków danych z GXT klasy wykryć konkretnej przeglądarki.

+3

Używanie bibliotek stron trzecich do takich podstawowych/trywialnych zadań (niezależnie od popularności, które mogą być do innych celów) jest bardzo złym nawykiem. –

+4

Mimo to, wciąż jest ciężko. A GXT jest bardzo popularną biblioteką, ludzie znajdujący ten post mogą go już używać. –

Powiązane problemy