1

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

我可以在这里做什么?

我使用 GWT 2.3.0 版和 GXT 2.2.5 版。

4

1 回答 1

3

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

user.agent属性值由在所谓的选择脚本(文件)中生成的一些脚本片段确定,该*.nocache.js脚本的内容可以取决于set-property您在 GWT 模块中拥有的 s。

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

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

如果您为多个浏览器编译,但随后只使用一个模块运行 DevMode 那么gecko1_8DevMode 将使用在一个从模块确定(这里硬编码到),然后会警告您它们不匹配(因此您的应用程序可能会出现功能障碍:例如,代码将使用,而应该在 Chrome 中使用)。*.nocache.jssafarigecko1_8DOMImplMozillaDOMImplSafari


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

于 2012-06-04T10:40:58.457 回答