2010-06-17 13 views
26

Gibt es GWT API, die mir sagen, welche Browser-Version es erkannt hat?Browser Version erkennen mit GWT?

Ich habe einen Fehler in der Regex-Behandlung des IE7 gefunden und muss einige knifflige String.matches() - Ausdrücke codieren.

+1

Können Sie den Fehler IE7 für uns beschreiben? Was ist ein Beispiel Regex und in welcher Weise irrt IE7 es (und andere Browser bekommen es richtig)? Ich denke nicht, dass es die Frage oder die Antworten beeinflusst, wäre einfach schön, diese Informationen hier für die Nachwelt zu haben. –

+0

Ich habe eine Passwort-Regex, die in jedem getesteten Browser neben IE7 mit == true übereinstimmt. PASSWORD_REGEX = "(? =. * \\ d) (? =. * [Az]) (? =. * [AZ]). {8,24})" – Stevko

Antwort

26

Sie könnten GWT deferred binding using replacement verwenden und zwei Implementierungen Ihrer Klasse erstellen, in der Sie regex verwenden.

Angenommen, Ihre Klasse heißt Parser und enthält Code für alle Webbrowser mit Ausnahme von IE7. Dann können Sie Parser erweitern und ParserIE7 Klasse für IE7 erstellen. Dann in Ihrer GWT-Modul-Konfigurationsdatei können Sie hinzufügen:

<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> 

dann von

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

Aufruf sollten Sie eine richtige haben (Web-Browser abhängig) Implementierung von Parser in parser variabel.

Sie können weitere Einzelheiten here finden.

+0

+1 Dies ist eine gültige Antwort, wenn Sie viele Änderungen zwischen verschiedenen Parsern haben und den Datenverkehr zwischen dem Server und dem Browser minimieren möchten. –

26

Sie können den Browsertyp mit dem folgenden Code erkennen.

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

Dann können Sie diese Funktion aufrufen und auf die Art des Browsers aussehen. Zum Beispiel entscheidet der folgende Code darüber, ob es sich um einen Internet Explorer handelt oder nicht.

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

This page hat den User Agent für fast jeden Browser auf den Menschen bekannt.

+26

Wie wäre es mit ['Window.Navigator .getUserAgent() '] (http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/Window.Navigator.html#getUserAgent%28%29) Ihrer JSNI-Methode? –

+0

Woher weiß ich, ob der Browser Mozilla Fire Fox/Safari/Opera/Chrome ist oder nicht? können Sie die gleiche Bedingung für die anderen Browser posten, wie Sie es für IE getan haben. – Jagadeesh

+5

Auch dies wird ** falsch ** für ** IE11 ** zurückgeben, da seine userAgent-Zeichenfolge "msie" nicht enthält. Man sollte 'contains (" msie ") || verwenden enthält ("Dreizack"), um ** IE11 ** zu entsprechen. – Yura

7

Wenn Sie die GXT-Bibliothek verwenden, können Sie GXT .isChrome verwenden Chrom zu erkennen und Sie können verschiedene Datenelemente von GXT Klasse zu erkennen, einen bestimmten Browser finden.

+3

Die Verwendung von Bibliotheken von Drittanbietern für solche grundlegenden/trivialen Aufgaben (unabhängig davon, ob sie für andere Zwecke populär sind) ist eine sehr schlechte Angewohnheit. –

+4

Downvoting ist ein bisschen hart aber trotzdem. Und GXT ist eine sehr populäre Bibliothek, Leute, die diesen Pfosten finden, benutzen ihn möglicherweise schon. –