【问题标题】:Browser version detect using GWT?使用 GWT 检测浏览器版本?
【发布时间】:2010-06-17 18:16:54
【问题描述】:

是否有 GWT api 可以告诉我它检测到的浏览器版本?

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

【问题讨论】:

  • 您能为我们描述一下 IE7 的缺陷吗?什么是示例正则表达式,IE7 以什么方式出错(而其他浏览器正确)?我不认为它会影响问题或答案,如果能在此处为后代提供这些信息会很好。
  • 我有一个密码正则表达式,在除 IE7 之外的所有测试浏览器中都匹配==true。 PASSWORD_REGEX = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,24})"

标签: browser gwt version-detection


【解决方案1】:

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

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

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

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

This page 拥有适用于几乎所有人类已知浏览器的用户代理。

【讨论】:

  • Window.Navigator.getUserAgent()代替你的JSNI方法怎么样?
  • 我怎么知道浏览器是否是“Mozilla Fire Fox/Safari/Opera/Chrome”。你能在其他浏览器上发布与 IE 相同的条件吗?
  • 另外,这将为 IE11 返回 false,因为它的 userAgent 字符串不包含 msie。应该使用contains("msie") || contains("trident") 来匹配IE11
【解决方案2】:

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

例如,假设您的类名为Parser,它包含适用于除 IE7 之外的所有 Web 浏览器的代码。然后您可以扩展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 变量中正确实现(取决于Web 浏览器)Parser

您可以找到更多详细信息here

【讨论】:

  • +1 如果您在不同的解析器之间有很多更改,并且希望最大限度地减少服务器和浏览器之间的流量,这是一个有效的答案。
【解决方案3】:

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

【讨论】:

  • 使用 3rd 方库来完成这些基本/琐碎的任务(不管它们是否受欢迎,它们可能用于其他目的)是非常糟糕的习惯。
  • 投反对票仍然有点苛刻。而且 GXT 是一个非常受欢迎的库,发现这篇文章的人可能已经在使用它了。
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 2016-03-21
  • 1970-01-01
  • 2014-09-14
  • 2011-03-10
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多