据我所知,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。
答案 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的。