为IE9设置用户代理(GWT)

问题描述:

我试图用IE9访问页面时将用户代理更改为Safari。为IE9设置用户代理(GWT)

我写这个的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> 
+0

这在GWT 2.0.4中似乎没有可能吗? – 2011-06-15 05:48:11

+0

@Rob:是的,这是GWT 2.3.0中的新功能。我更新了我的答案,也涵盖了旧版GWT。 – 2011-06-15 06:16:33

+0

谢谢!然而,我得到一个错误在任何版本的IE上运行这个:错误,同时执行属性'user.agent'的JavaScript提供者 com.google.gwt.core.client.JavaScriptException:(TypeError):'odoc'未定义 – 2011-06-15 07:09:32

我不是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> 
+0

使用工作。这是条款不起作用。基于给定的代码,我无法理解如何写出比我已经做的更好的东西。 – 2011-06-14 10:13:49