托管模式的GWT user.agent?

时间:2012-06-04 10:25:20

标签: gwt maven gxt

据我所知,Google Web Toolkit .gwt.xml文件中的“user.agent”属性指定了Java to Java Script转换的目标。因为托管模式仍然运行Java而不是Javascript我不明白为什么谷歌浏览器抱怨“user.agent”值没有正确设置。更奇怪的是,即使我用<set-property name="user.agent" value="gecko1_8,safari" />添加“safari”,它仍然会抱怨。

我可以在这做什么?

我使用GWT版本2.3.0和GXT版本2.2.5。

1 个答案:

答案 0 :(得分:3)

DevMode不会编译为JavaScript,但仍然必须遵守延迟绑定规则,其中许多都基于user.agent属性,因此必须正确设置。

user.agent属性值由所谓的选择脚本*.nocache.js文件)中生成的某些脚本片段确定,此脚本的内容可能取决于在你的GWT模块中的set-property上。

例如,如果使用<set-property name="user.agent" value="gecko1_8" />编译GWT模块,则user.agent属性将被硬编码为gecko1_8中的*.nocache.js值。
如果您以后运行DevMode,除非它认为必须覆盖现有的*.nocache.js,否则它将使用它;因此,仅为*.nocache.js生成gecko1_8时使用Chrome运行应用程序只会导致类似以下错误:

com.google.gwt.core.client.JavaScriptException: (TypeError): Property 'user.agent' of object  is not a function

如果您为多个浏览器编译,但是仅为gecko1_8运行带有模块的DevMode,那么DevMode将使用*.nocache.js中找到的属性提供程序来确定 actual < / em>正在使用的用户代理(对于Chrome来说是walle dbe safari),并将其与从模块确定的那个(此处硬编码为gecko1_8)进行比较,然后会警告您不匹配(因此您的应用可能会出现问题:代码会使用DOMImplMozilla,而DOMImplSafari应该在Chrome中使用。)


因此,要解决此问题,请删除*.nocache.js文件,以便DevMode生成新文件,或使用user.agent值与您将使用的浏览器匹配的模块重新编译应用程序DevMode的。