2010-06-17 2 views
26

Есть ли GWT api, который скажет мне, какую версию браузера он обнаружил?Определить версию браузера с использованием GWT?

Я нашел ошибку с обработкой регулярных выражений IE7 и должен кодировать некоторые сложные выражения String.matches().

+1

Не могли бы вы описать недостаток IE7 для нас? Что такое примерное регулярное выражение и каким образом IE7 ошибается (и другие браузеры понимают это правильно)? Я не думаю, что это затрагивает вопрос или ответы, просто было бы неплохо иметь эту информацию здесь для потомков. –

+0

У меня есть регулярное выражение паролей, которое соответствует == true в каждом браузере, протестированном помимо IE7. PASSWORD_REGEX = "((? =. * \\ d) (? =. * [Az]) (? =. * [AZ]). {8,24})" – Stevko

ответ

26

Вы можете использовать GWT deferred binding using replacement и создать две реализации вашего класса, в которых вы используете регулярное выражение.

Например, предположим, что ваш класс имеет имя Parser и содержит код для всех веб-браузеров, за исключением IE7. Затем вы можете расширить Parser и создать класс ParserIE7 для IE7. Затем в конфигурационном файле модуля GWT вы можете добавить:

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

Тогда по телефону

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

вы должны иметь правильную (веб-браузер) зависимую реализацию Parser в parser переменной.

Подробнее см. here.

+0

+1 Это действительный ответ, если у вас много изменений между разными парсерами и вы хотите минимизировать трафик между сервером и браузером. –

26

Вы можете определить тип браузера, используя следующий код.

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

Затем вы можете вызвать эту функцию и посмотреть тип браузера. Например, приведенный ниже код решает, является ли он интернет-проводником или нет.

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

This page имеет User Agent практически для любого браузера, известных человеку.

+26

Как насчет ['Window.Navigator .getUserAgent() '] (http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/Window.Navigator.html#getUserAgent%28%29) вместо этого вашего метода JSNI? –

+0

Как узнать, является ли браузер «Mozilla Fire Fox/Safari/Opera/Chrome» или нет. можете ли вы опубликовать такое же условие для других браузеров, как и для IE. – Jagadeesh

+5

Кроме того, это вернет ** false ** для ** IE11 **, так как строка userAgent не содержит 'msie'. Нужно использовать 'contains (" msie ") || содержит («трезубец») 'для соответствия ** IE11 **. – Yura

7

Если вы используете библиотеку GXT, вы можете использовать GXT .isChrome для обнаружения хрома и вы можете найти различные элементы данных класса GXT для обнаружения конкретного браузера.

+3

Использование сторонних библиотек для таких основных/тривиальных задач (независимо от того, насколько популярны они могут быть для других целей) - очень плохая привычка. –

+4

Downvoting немного суровый, хотя. И GXT - очень популярная библиотека, люди, которые могут найти этот пост, могут уже использовать его. –

Смежные вопросы