2010-06-17 14 views
26

Esiste un'API GWT che mi dirà quale versione del browser ha rilevato?Rileva la versione del browser utilizzando GWT?

Ho trovato un difetto con la gestione delle espressioni regolari di IE7 e ho bisogno di codificare alcune espressioni di String.matches().

+1

Potresti descrivere il difetto di IE7 per noi? Che cosa è una regex di esempio e in che modo IE7 si sbaglia (e altri browser lo fanno bene)? Non penso che influenzi la domanda o le risposte, sarebbe bello avere quell'informazione qui per i posteri. –

+0

Ho una regex di password che corrisponde a == true in ogni browser testato oltre a IE7. PASSWORD_REGEX = "((? =. * \\ d) (? =. * [Az]) (? =. * [AZ]). {8,24})" – Stevko

risposta

26

È possibile utilizzare GWT deferred binding using replacement e creare due implementazioni della classe in cui si utilizza regex.

Ad esempio, supponiamo che la classe sia denominata Parser e che contenga il codice per tutti i browser Web ad eccezione di IE7. Quindi è possibile estendere Parser e creare la classe ParserIE7 per IE7. Poi, nel file di configurazione del modulo GWT è possibile aggiungere:

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

Poi chiamando

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

si dovrebbe avere un adeguato (a seconda del browser web) l'attuazione di Parser in parser variabile.

Potete trovare ulteriori dettagli here.

+0

+1 Questa è una risposta valida se si hanno molte modifiche tra parser diversi e si vuole minimizzare il traffico tra il server e il browser. –

26

È possibile rilevare il tipo di browser utilizzando il codice riportato di seguito.

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

Quindi è possibile chiamare tale funzione e osservare il tipo di browser. Ad esempio il codice sottostante decide se è Internet Explorer o no.

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

This page ha l'User Agent per quasi tutti i browser che l'uomo conosca.

+26

Informazioni su ['Window.Navigator .getUserAgent() '] (http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/Window.Navigator.html#getUserAgent%28%29) invece del tuo metodo JSNI? –

+0

Come faccio a sapere se il browser è "Mozilla Fire Fox/Safari/Opera/Chrome" oppure no. puoi pubblicare la stessa condizione per gli altri browser come hai fatto per IE. – Jagadeesh

+5

Inoltre, restituirà ** false ** per ** IE11 **, poiché la stringa userAgent non contiene 'msie'. Si dovrebbe usare 'contains (" msie ") || contiene ("tridente") 'per abbinare ** IE11 **. – Yura

7

Se si utilizza la libreria GXT, è possibile utilizzare GXT .isChrome per rilevare cromo e si possono trovare diversi membri di dati di GXT classe per rilevare un particolare browser.

+3

L'utilizzo di librerie di terze parti per attività di base/banali (indipendentemente dal fatto che possano essere utilizzate per altri scopi) è un'abitudine molto brutta. –

+4

Il downvoting è ancora un po 'duro. E GXT è una libreria molto popolare, le persone che trovano questo post potrebbero già usarlo. –

Problemi correlati