使用GWT检测浏览器版本?

Ste*_*vko 26 browser gwt version-detection

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

我发现IE7的正则表达式处理有一个缺陷,需要编写一些棘手的String.matches()表达式.

Rom*_*eau 26

您可以使用以下代码检测浏览器类型.

public static native String getUserAgent() /*-{
return navigator.userAgent.toLowerCase();
}-*/;
Run Code Online (Sandbox Code Playgroud)

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

if(getUserAgent().contains("msie"))
{
///////// Write your code for ie
}
Run Code Online (Sandbox Code Playgroud)

此页面包含几乎所有人都知道的浏览器的用户代理.

  • 怎么样[`Window.Navigator.getUserAgent()`](http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/Window.Navigator.html# getUserAgent%28%29)而不是你的JSNI方法? (26认同)
  • 此外,这将为**IE11**返回**false**,因为它的userAgent字符串不包含`msie`.一个人应该使用`contains("msie")|| 包含("三叉戟")`以匹配**IE11**. (5认同)

Pio*_*otr 26

您可以使用替换使用GWT延迟绑定,并创建您使用正则表达式的类的两个实现.

例如,假设您的类已命名,Parser并且它包含除IE7之外的所有Web浏览器的代码.然后,您可以扩展ParserParserIE7为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>
Run Code Online (Sandbox Code Playgroud)

然后通过电话

Parser parser = GWT.create(Parser.class);
Run Code Online (Sandbox Code Playgroud)

你应该Parserparser变量中有一个适当的(依赖于Web浏览器)实现.

你可以在这里找到更多细节.


小智 7

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

  • 尽管如此,Downvoting还是有点苛刻.GXT是一个非常受欢迎的图书馆,人们发现这篇文章可能已经在使用它了. (4认同)
  • 使用第三方库来完成这些基本/琐碎的任务(不管它们可能出于其他目的而流行)都是非常糟糕的习惯. (3认同)