2010-06-17 129 views
26

是否有GWT API会告诉我它检测到哪个浏览器版本?使用GWT检测浏览器版本?

我发现IE7的正则表达式处理存在缺陷,需要围绕一些棘手的String.matches()表达式进行编码。

+1

你能为我们描述IE7的缺陷吗?什么是示例正则表达式以及IE7以何种方式出错?以及其他浏览器是否正确?我认为这不会影响问题或答案,只是希望能够在这里为后人提供这方面的信息。 – 2010-06-17 20:42:39

+0

我有一个密码正则表达式匹配除了IE7以外的每个浏览器中的== true。 ('=。* \\ d)(?=。* [az])(?=。* [AZ])。{8,24})“ – Stevko 2010-06-18 06:24:22

回答

26

你可以使用GWT deferred binding using replacement并创建你的类的两个实现你使用正则表达式。

例如,假设您的课程名为Parser,它包含除IE7以外的所有网络浏览器的代码。然后,您可以扩展Parser并为IE7创建ParserIE7类。然后在你的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如果您在不同的解析器之间有很多更改并希望将服务器和浏览器之间的流量降至最低,那么这是一个有效的答案。 – 2010-06-17 19:25:30

26

您可以使用下面的代码检测浏览器类型。

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

然后您可以调用该函数并查看浏览器的类型。例如下面的代码决定它是否是Internet Explorer。

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

This page拥有适用于所有浏览人的浏览器的用户代理。

+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方法? – 2011-05-09 09:01:07

+0

我如何知道浏览器是否是'Mozilla Fire Fox/Safari/Opera/Chrome'。你可以发布与其他浏览器相同的条件,就像你为IE做的一样。 – Jagadeesh 2012-08-07 09:33:19

+5

此外,这将返回**错误** ** IE11 **,因为它是userAgent字符串不包含'msie'。应该使用'contains(“msie”)||包含(“三叉戟”)匹配** IE11 **。 – Yura 2014-08-04 09:38:52

7

如果您使用的是GXT库,你可以使用GXT .isChrome检测铬,你可以找到GXT类的不同的数据成员来检测特定的浏览器。

+3

使用第三方库进行这种基本/平凡的任务(不管它们可能用于其他目的的流行)是非常糟糕的习惯。 – 2011-10-10 08:47:49

+4

虽然downvoting仍然有点苛刻。 GXT是一个非常受欢迎的图书馆,找到这篇文章的人可能已经在使用它了。 – 2012-07-17 11:41:10