GWT 2.5.1 和 Kindle paperwhite 用户代理

Posted

技术标签:

【中文标题】GWT 2.5.1 和 Kindle paperwhite 用户代理【英文标题】:GWT 2.5.1 and Kindle paperwhite user agent 【发布时间】:2013-11-08 08:20:54 【问题描述】:

我正在使用 GWT 2.5.1,并且我正在访问使用 Tomcat 7.0.32 部署的 .war,使用的是 Kindle paperwhite 型号 EY21 的浏览器。

问题是 GWT 无法正确获取 Kindle 的用户代理,我的意思是,我得到了以下值:

来自我的服务器: getMyThreadLocalRequest().getHeader("user-agent") --> Mozilla/5.0 (X11; U; Linux armv7l like android; en-us) AppleWebKit/531.2+ (Khtml, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+ --> 好的!

来自网络 www.whatsmyuseragent.com --> Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+ --> 好的!

来自 GWT 2.5.1 库:Window.Navigator.getUserAgent() --> Mozilla/5.0 (X11; ; U; Linux armv7l; en-us) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ --> ?¿?¿

所以,我认为 GWT 函数没有为 Kindle paperwhite 浏览器的用户代理获取正确的值...

有什么想法吗??

提前非常感谢!!

【问题讨论】:

【参考方案1】:

GWT 在客户端计算 user.agent 值的方式是在用于创建引导脚本的 UserAgentPropertyGenerator.java 类中:

  body.println("var ua = navigator.userAgent.toLowerCase();");

  [...]

  // webkit family
  new UserAgentPropertyGeneratorPredicate("safari")
  .getPredicateBlock()
    .println("return (ua.indexOf('webkit') != -1);")
  .returns("'safari'"),

查看此代码和您发送的用户代理字符串,gwt 必须选择 webkit 排列(因为用户代理包含 WebKit)。

如果您没有收到任何错误,只是一个空白页面,可能您在模块文件中禁用了 webkit 浏览器(safari)的排列,或者您可能正在使用除 user.agent 之外的其他属性项目,并且某些属性组合与您的设备不匹配。

如果您使用的是xsiframe 链接器,请查看编译器输出文件夹中生成的compile-mappings.txt 文件,其中包含排列名称和属性的列表。

【讨论】:

以上是关于GWT 2.5.1 和 Kindle paperwhite 用户代理的主要内容,如果未能解决你的问题,请参考以下文章

GWT 2.5.1编译始终抛出Java堆空间错误

如何使用 GWT、HTML 和 JDBC 或 Hibernate 将数据插入 MySQL 数据库?

如何区别Kindle各型号

电纸书kindle支持啥格式

kindle连wifi登录青云阻断页面

请教kindle和Ipad上自带的字体叫啥