GWT模块XML - 如何重新定义和使用多个用户代理

时间:2009-05-20 21:27:41

标签: gwt

http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=FAQ_CompileOnePermutation

在我学到的文章中,我可以加速编译器,但指定目标用户代理。问题我该如何指定多个用户代理?假设我的应用程序支持ie6和FF3

<set-property name="user.agent" value="ie6,geck1_8" />

不起作用 - 我得到了XML解析错误:

[ERROR] Invalid property value 'ie6,gecko1_8'

我想知道是否有办法在模块XML文件中指定多个特定用户代理?

5 个答案:

答案 0 :(得分:7)

在GWT2.4中将user.agent值设置为gecko时,我遇到了类似的错误消息。所以我环顾四周,找到了gwt代码定义可能值的位置。

如果您查看com.google.gwt.user.UserAgent.gwt.xml中的gwt-user.jar,您可以看到您正在使用的GWT版本的可能值。

对于GWT2.4,这是我发现的:

<!-- Browser-sensitive code should use the 'user.agent' property -->
  <define-property name="user.agent" values="ie6" />
  <extend-property name="user.agent" values="ie8" />
  <extend-property name="user.agent" values="gecko1_8" />
  <extend-property name="user.agent" values="safari" />
  <extend-property name="user.agent" values="opera" />
  <extend-property name="user.agent" values="ie9" fallback-value="ie8" />
  <property-provider name="user.agent" generator="com.google.gwt.user.rebind.UserAgentPropertyGenerator"/>

因此,在我的情况下,gecko不是user.agent的有效值,如果我使用gecko1_8,它可以很好地编译Firefox。

答案 1 :(得分:6)

适用于GWT 1.6,您的* .gwt.xml文件:

<module rename-to="moduleName">
      <!-- blah blah -->
      <set-property name="user.agent" value="ie6,gecko,gecko1_8" />
      <!-- generate perms for IE and firefox only -->
</module>

答案 2 :(得分:6)

对于像chrome这样的基于webkit的浏览器,使用“safari”作为用户代理

答案 3 :(得分:4)

为了快速部署任何应用程序,您需要两个目标;一次用于引擎,您的托管模式部署在{Firefox / Linux,Safari / Mac,IE6 / Win}上,一个用于您的敏捷浏览器,可以让您实时构建css {Firefox + Firebug}。

Linux: <set-property name="user.agent" value="gecko1_8,gecko"/>
Mac: <set-property name="user.agent" value="gecko1_8,safari"/>
...etc...

这只是GWT&gt; = 1.6!

对于较旧的gwt项目,您必须超级com / google / gwt / user / UserAgent.gwt.xml文件...将它放在包含在类路径上的gwt - * .jar之前的源位置。基本上,您可以将该文件复制到与原始文件相同的包中的新文件中,并编辑返回实际user.agent值的CDATA javascript块。玩这个你喜欢的,但不要对他们的user.agent属性过于疯狂,因为它将在未来版本中改变ie8。

要定位即浏览器,请构建您自己的ie.version属性,并在UserAgent.gwt.xml中调整属性提供程序的副本以定位不同版本的ie。只需确保在使用自定义属性进行延迟绑定时,您可以执行以下操作:

<all>
  <when-property-is name="user.agent" value="ie6"/>
  <any>
    <when-property-is name="ie.version" value="ie7"/>
    <when-property-is name="ie.version" value="ie8"/>
  </any>
</all>

或者你会得到ie7 + gecko / safari版本和其他永远无法使用的愚蠢垃圾。

注意:属性提供程序中的任何代码都加载到.nocache.js中,在下载.cache.js有效内容时预加载images / css非常有用。
只需添加var __cached = new Image('Url To Compiled Image /无论你想加载什么');

答案 4 :(得分:1)

还没有。这个想法是你快速开发到一个浏览器然后编译一次以便为所有浏览器进行部署(即,做最终测试),GWT处理浏览器差异。不要忘记,在部署时,GWT将优化每个浏览器的下载量,以便最终与您选择的用户代理数量无关。