2012-06-04 103 views
1

据我所知,Google Web Toolkit .gwt.xml文件中的“user.agent”属性指定了Java到Java Script翻译的目标。因为托管模式仍然运行Java而不是Javascript,所以我不明白为什么google chrome会抱怨“user.agent”值设置不正确。更奇怪的是,即使我在<set-property name="user.agent" value="gecko1_8,safari" />上添加“safari”,它也会一直抱怨。GWT user.agent托管模式?

我能在这里做什么?

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

回答

3

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

user.agent属性值是由一些脚本决定在所谓选择脚本(该*.nocache.js文件)代码段产生的,这个脚本的内容可以取决于set-property是你的GWT模块中有(S )。

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

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

如果您对多个浏览器进行编译,但随后的模块只为gecko1_8运行DevMode的,然后在DEVMODE将使用在*.nocache.js中找到的财产​​提供者来确定正在使用的用户代理,并且将其与模块确定的用户代理(在此处硬编码为gecko1_8)进行比较,然后将警告你他们不匹配(因此你的应用程序可能会失效:代码将使用DOMImplMozilla进行安装nce,而Chrome应该使用DOMImplSafari)。


因此,要解决这个问题,可以删除*.nocache.js文件,以便DevMode的会产生一个新的,或与模块,其user.agent值匹配,你会在DevMode的使用浏览器重新编译应用程序。