Java 为IE9(GWT)设置用户代理

Java 为IE9(GWT)设置用户代理,java,gwt,Java,Gwt,当使用IE9访问页面时,我试图将用户代理更改为safari 我将其写入gwt.xml文件: <set-property name='user.agent' value='safari'> <when-property-is name="user.agent" value="ie9" /> </set-property> 然而,IE9现在根本找不到任何用户代理(甚至不回到自己的)。 我做错了什么 编辑:我必须使用GWT2.0.4 EDIT2:阅读答案

当使用IE9访问页面时,我试图将用户代理更改为safari

我将其写入gwt.xml文件:

<set-property name='user.agent' value='safari'>
   <when-property-is name="user.agent" value="ie9" />
</set-property>

然而,IE9现在根本找不到任何用户代理(甚至不回到自己的)。 我做错了什么

编辑:我必须使用GWT2.0.4


EDIT2:阅读答案的评论,看看我是如何解决的。

我不能100%肯定我理解你的问题。然而,我相信你不能真正改变用户代理。您可能想做的是处理来自ie9浏览器的请求,就像它们来自safari浏览器一样。在这种情况下,我认为您可以使用:此网页中的示例对您来说如下所示:

<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>

我以前没有这样做过,但我假设您必须实现自己的UserAgentPropertyGenerator(因为这是一个动态计算用户代理属性的类!),然后像在com.google.gwt.user.UserAgent.gwt.xml中那样绑定它:

<property-provider 
   name="user.agent"
   generator="com.google.gwt.user.rebind.UserAgentPropertyGenerator"/>

对于较旧版本的GWT(<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>
=8){
返回“ie8”;
}否则{
var result=/msie([0-9]+)\([0-9]+)/.exec(ua);
if(result&&result.length==3){
var v=生成版本(结果);
如果(v>=6000){
返回“ie6”;
}
}
}
}否则如果(ua.indexOf(“壁虎”)!=-1){
变量结果=/rv:([0-9]+)\([0-9]+)/.exec(ua);
if(result&&result.length==3){
如果(生成版本(结果)>=1008)
返回“壁虎1_8”;
}
返回“壁虎”;
}
返回“未知”;
]]>

使用works。这个术语不起作用。基于给定的代码,我无法理解如何编写比我已经编写的更好的代码。这在GWT2.0.4中似乎不可能实现,是吗?@Rob:是的,这在GWT2.3.0中是新的。我更新了我的答案,也涵盖了GWT的旧版本。谢谢!但是,我在任何版本的IE上运行此命令时都会出错:执行属性“user.agent”com.google.gwt.core.client.JavaScriptException:(TypeError):“odoc”未定义问题实际上是我如何检查IE9(odoc.body.style.opacity!=未定义)的JavaScript提供程序导致较低的IE抛出错误。我把它改为if(document.documentMode>=9)返回'safari',它成功了!