我正在为Google Chrome扩展程序编写链接器。在gwt.xml文件中,我需要添加一行说明用户代理属性。对于firefox,模式如下:
<set-property name="user.agent" value="gecko1_8"/>
但是,我无法为Google Chrome特定代码找到相应的值名称。
答案 0 :(得分:3)
这是list of supported useragents。令人困惑的是,Chrome的那个是“Safari”。 (这可能是由于这两种浏览器都是基于webkit的,但我可能是错的。)
<set-property name="user.agent" value="safari"/>
答案 1 :(得分:3)
GWT对Chrome和Safari的处理方式相同,因此只有“safari”代理值可以覆盖两者。所以你不能只使用用户代理配置来做到这一点。
然而,GWT的延迟绑定机制确实有一种方法可以通过创建“属性提供程序”来将代码定制为仅在运行时被嗅探的属性。这基本上就是你在.gwt.xml中执行此操作的方法:
<define-property name="is.really.chrome" values="false,true"/>
<property-provider name="is.really.chrome"><![CDATA[
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("applewebkit") != -1) {
if (ua.indexOf("chrome") != -1) {
return true;
}
}
return false;
]]></property-provider>
<replace-with
class="some.implementation.of.interface">
<when-type-is class="some.interface.used.with.GWT.create"/>
<when-property-is name="user.agent" value="safari"/>
<when-property-is name="is.really.chrome" value="true"/>
</replace-with>
上面的部分内容是定义一个新属性“is.really.chrome”,其值将由加载应用程序时<property-provider>
块中的Javascript代码确定(此代码内联进入GWT启动序列。)
第二部分<replace-with>
显示了如何定义对此新属性的值敏感的替换规则。这个(以及任何其他类似的规则)将导致GWT编译器创建代码的附加排列,这与冒险版本大致相同,但使用chrome自定义。
这篇文章是我在这个主题上发现的最好的文章之一:http://css.dzone.com/news/understanding-gwt-compiler