IE 11用户代理字符串

时间:2013-11-18 21:17:25

标签: asp.net user-agent internet-explorer-11

我看到你在IE 11中回答了有关用户代理字符串的问题,我对此进行了跟进。

我更愿意让我的公司升级到最新版本的.net 4.5和最新的Windows服务器操作系统,但这似乎不是一个选择。

APP_Browser文件夹和mozilla.browser文件中已有大约十几个文件似乎与您建议的修补程序冲突。

当我单独使用您的代码放置文件时 - 一切正常。当我包含这个mozilla.browser文件时,它又回到了不工作状态......

我们的mozilla.browser文件如下:

<browser id="Mozilla" parentID="Default">
        <identification>
            <userAgent match="Mozilla" />
            <userAgent nonMatch="MME|Opera" />
        </identification>

        <capture>
            <userAgent match="Mozilla/(?'version'(?'major'\d+)(?'minor'\.\d+)\w*)" />
            <userAgent match=" (?'screenWidth'\d*)x(?'screenHeight'\d*)" />
        </capture>

        <capabilities>
            <capability name="browser"                         value="Mozilla" />
            <capability name="cookies"                         value="false" />
            <capability name="defaultScreenCharactersHeight"   value="40" />
            <capability name="defaultScreenCharactersWidth"    value="80" />
            <capability name="defaultScreenPixelsHeight"       value="480" />
            <capability name="defaultScreenPixelsWidth"        value="640" />
            <capability name="inputType"                       value="keyboard" />
            <capability name="isColor"                         value="true" />
            <capability name="isMobileDevice"                  value="false" />
            <capability name="majorversion"                    value="${major}" />
            <capability name="maximumRenderedPageSize"         value="300000" />
            <capability name="minorversion"                    value="${minor}" />
            <capability name="screenBitDepth"                  value="8" />
            <capability name="screenPixelsHeight"              value="${screenHeight}" />
            <capability name="screenPixelsWidth"               value="${screenWidth}" />
            <capability name="supportsBold"                    value="true" />
            <capability name="supportsCss"                     value="true" />
            <capability name="supportsDivNoWrap"               value="true" />
            <capability name="supportsFontName"                value="true" />
            <capability name="supportsFontSize"                value="true" />
            <capability name="supportsImageSubmit"             value="true" />
            <capability name="supportsItalic"                  value="true" />
            <capability name="type"                            value="Mozilla" />
            <capability name="version"                         value="${version}" />
        </capabilities>
    </browser>

...

我确信解决方案位于父层次结构和正则表达式捕获中。想知道你是否有任何见解。

1 个答案:

答案 0 :(得分:0)

我今天大部分时间都在努力解决这个问题并发现了一大堆不同的行为,但总结一下:

  • ASP.NET 4.0无法处理I.E. 11的新用户代理字符串 - (Mozilla / 5.0(Windows NT 6.3; WOW64; Trident / 7.0; rv:11.0),如Gecko - 无论您更改了哪个配置文件或修补程序。如果您想处理此用户代理正确的字符串(例如,基于cookie的会话ID正常工作),您应该升级到.NET 4.5。
  • 虽然可能是指定告诉I.E.的配置设置的可靠方法。 11总是使用兼容模式,我无法弄清楚 - X-UA兼容性可能会改变I.E.呈现页面,但它不会更改它用于下一次请求到同一服务器/站点的用户代理。
  • 即。默认情况下,11会为 Intranet 站点发送较旧的“兼容模式”用户代理字符串。因此,在本地测试时,您可能会发现一切正常,但当其他人尝试使用IP地址或FQDN连接到同一台服务器时,它将无法正常工作。其实我不太确定我是怎么做的。 11判断内联网上是否有东西,在一种情况下,即使只使用另一台机器上的不合格服务器名称也不足以让我认为我正在访问内部网站点。
  • 即。 11可以配置为始终使用特定网站的兼容模式,但您必须在工具菜单中搜索它。

就我个人而言,到目前为止,最安全的选择是升级到.NET 4.5。

更新:事实证明我的第一点并非严格属实。您可以在App_Browsers中的.browser文件中添加一个新条目,以识别IE 11的用户代理字符串,但它仍然非常棘手,使其工作,我不确定需要哪些选项。它开始了:

<browser id="IE11" parentID="Mozilla">
<identification>
<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser"              value="IE" />
<capability name="layoutEngine"         value="Trident" />

...