为IE9设置用户代理GWT

问题描述

| 我正在尝试使用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:阅读答案的注释以查看如何解决。     

解决方法

        我以前没有做过,但是我假设您将必须实现自己的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>
    ,        我不是100%肯定我了解您的问题。但是,我相信您不能真正更改用户代理。您可能想做的就是处理来自ie9浏览器的请求,就像它们来自野生动物园浏览器一样。在这种情况下,我认为您可以使用“使用替换的延迟绑定”:此网页中的示例对您来说将像这样:
<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>