我正在尝试使用IE9访问页面时将用户代理更改为safari。
我把它写到gwt.xml文件中:
<set-property name='user.agent' value='safari'>
<when-property-is name="user.agent" value="ie9" />
</set-property>
然而IE9现在根本找不到任何用户代理(甚至没有找回自己的用户代理)。 我做错了什么?
编辑:我必须使用GWT 2.0.4
EDIT2:阅读答案评论以了解我是如何解决的。
答案 0 :(得分:6)
我之前没有这样做,但我认为你必须实现自己的UserAgentPropertyGenerator(因为这是动态评估用户代理属性的类!),然后像com.google.gwt一样绑定它。 user.UserAgent.gwt.xml:
<property-provider
name="user.agent"
generator="com.google.gwt.user.rebind.UserAgentPropertyGenerator"/>
对于旧版本的GWT(&lt; 2.3.0),这可以直接在com.google.gwt.user.UserAgent.gwt.xml中配置为:
<property-provider name="user.agent"><![CDATA[
var ua = navigator.userAgent.toLowerCase();
var makeVersion = function(result) {
return (parseInt(result[1]) * 1000) + parseInt(result[2]);
};
if (ua.indexOf("opera") != -1) {
return "opera";
} else if (ua.indexOf("webkit") != -1) {
return "safari";
} else if (ua.indexOf("msie") != -1) {
if (document.documentMode >= 8) {
return "ie8";
} else {
var result = /msie ([0-9]+)\.([0-9]+)/.exec(ua);
if (result && result.length == 3) {
var v = makeVersion(result);
if (v >= 6000) {
return "ie6";
}
}
}
} else if (ua.indexOf("gecko") != -1) {
var result = /rv:([0-9]+)\.([0-9]+)/.exec(ua);
if (result && result.length == 3) {
if (makeVersion(result) >= 1008)
return "gecko1_8";
}
return "gecko";
}
return "unknown";
]]></property-provider>
答案 1 :(得分:3)
我不是100%确定我理解你的问题。但是,我相信您无法真正更改用户代理。您可能想要做的是处理来自ie9浏览器的请求,就像它们来自safari浏览器一样。在这种情况下,我认为您可以使用Deferred Binding Using Replacement:此网页中的示例对您来说会是这样的:
<module>
<!-- ... other configuration omitted ... -->
<!-- Fall through to this rule is the browser isn't IE or Mozilla -->
<replace-with class="com.google.gwt.user.client.ui.impl.PopupImpl">
<when-type-is class="com.google.gwt.user.client.ui.impl.PopupImpl"/>
</replace-with>
<!-- Handling safari and ie9 in the same way -->
<replace-with class="com.google.gwt.user.client.ui.impl.PopupImplSafari">
<when-type-is class="com.google.gwt.user.client.ui.impl.PopupImpl" />
<any>
<when-property-is name="user.agent" value="safari"/>
<when-property-is name="user.agent" value="ie9" />
</any>
</replace-with>
</module>