【问题标题】:Force IE 11 "User agent string" using tags使用标签强制 IE 11“用户代理字符串”
【发布时间】:2013-12-05 22:06:47
【问题描述】:

我的网站在 IE11 中损坏。

我们都知道HTML标签允许开发者强制IE兼容模式;例如

<meta http-equiv="X-UA-Compatible" content="IE=8, IE=9" />

效果很好,解决了 IE10 的可视化问题。

但实际上在 IE11 上,即使 Compatibility mode 设置为 IE9User agent string 设置为 default 并且 javascript 不起作用。 手动将User agent string 更改为IE10 解决了我的问题。

我要解决导致网站错误的真正问题,但实际上 我需要一种快速、编程的方式将“用户代理字符串”强制到 IE10,因为我不能联系每一位用户。

有人可以帮忙吗?

【问题讨论】:

  • defaultDocument mode 相关。如果你在content="IE=8" 时登录navigator.userAgent,你会得到Mozilla/4.0 (compatible; MSIE 8.0; ...)
  • @Teemu 等等?手动更改“用户代理字符串”可以解决问题。您是否建议一种以编程方式更改它的方法?
  • 如果我在 IE11 中有一个 &lt;meta http-equiv="X-UA-Compatible" content="IE=8" /&gt;,而无需触摸“仿真”面板,则记录 navigator.userAgent 将打印 Mozilla/4.0 (compatible; MSIE 8.0; ...),这不是 IE11 的默认。如果这不是你需要的,我误解了你的问题......
  • UA需要修改哪些代码?您可以编辑该代码而不是尝试更改 UA 字符串吗?
  • 从 userAgent 字符串中删除 MSIE xx.0 对于 IE 11 来说是一个糟糕的举动。如果 MSIE 存在,它将破坏大量依赖于假设浏览器是 IE 的 JavaScript。也可能会破坏 MS 在他们提供的 .NET 浏览器文件中的匹配。

标签: javascript internet-explorer cross-browser compatibility internet-explorer-11


【解决方案1】:

我在 2003 年的 Windows 服务器中也遇到了同样的问题,使用 .net 框架 4.0,经过长时间的研究,我发现以下内容很有帮助...

我创建了 App_Browsers 文件夹并放置了一个名为 ie.browser 的浏览器文件并粘贴了下面的浏览器定义文本,它就开始工作了

<browsers>
<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" />
  <capability name="layoutEngineVersion"  value="${layoutVersion}" />
  <capability name="extra"                value="${extra}" />
  <capability name="isColor"              value="true" />
  <capability name="letters"              value="${letters}" />
  <capability name="majorversion"         value="${major}" />
  <capability name="minorversion"         value="${minor}" />
  <capability name="screenBitDepth"       value="8" />
  <capability name="type"                 value="IE${major}" />
  <capability name="version"              value="${version}" />
</capabilities>
 </browser>

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
<identification>
  <capability name="majorversion" match="11" />
</identification>

<capabilities>
  <capability name="ecmascriptversion"    value="3.0" />
  <capability name="jscriptversion"       value="5.6" />
  <capability name="javascript"           value="true" />
  <capability name="javascriptversion"    value="1.5" />
  <capability name="msdomversion"         value="${majorversion}.${minorversion}" />
  <capability name="w3cdomversion"        value="1.0" />
  <capability name="ExchangeOmaSupported" value="true" />
  <capability name="activexcontrols"      value="true" />
  <capability name="backgroundsounds"     value="true" />
  <capability name="cookies"              value="true" />
  <capability name="frames"               value="true" />
  <capability name="javaapplets"          value="true" />
  <capability name="supportsCallback"     value="true" />
  <capability name="supportsFileUpload"   value="true" />
  <capability name="supportsMultilineTextBoxDisplay" value="true" />
  <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
  <capability name="supportsVCard"        value="true" />
  <capability name="supportsXmlHttp"      value="true" />
  <capability name="tables"               value="true" />
  <capability name="supportsAccessKeyAttribute"    value="true" />
  <capability name="tagwriter"            value="System.Web.UI.HtmlTextWriter" />
  <capability name="vbscript"             value="true" />
</capabilities>
  </browser>
</browsers>

【讨论】:

  • 几个月来一直在寻找这个!无法将 .NET 4.0 升级到 4.5,因为我不知道它会拉下什么。现在终于 Ajax 与 IE 11 一起工作了(有点) - 谢谢
  • 可以在不需要重新构建的情况下添加它吗?
  • @Jackson 无需重新构建。
  • 抱歉,这对使用 IE11 的 Server 2003 完全没有帮助。
  • 我安装了 .net 4.5,但检查代理字符串的旧旧代码仍然在 IE 11 中失败。由于我没有源代码,所以我使用了这种方法,它为我解决了问题。谢谢@Subhranshu
【解决方案2】:

解决了!网站刚刚在服务器上安装了 Dotnet 框架 4.5


实际上我没有找到以编程方式强制浏览器用户代理字符串的方法(这是最初的问题)。但是用0代码修复了网站..

刚刚做了很多测试,在一台服务器上我发现该网站正在运行,而在另一台服务器上却没有。

好服务器”是 Win2012,“坏服务器”是 Win2008。在 Win2012 上,Aspnet 4.5 正在运行,而在 Win2008 上则没有。

我在坏服务器上也安装了 dotnet framework 4.5,一切都开始工作了!

【讨论】:

    【解决方案3】:

    如果您不想安装整个 .NET Framework 4.5,您可以使用 Microsoft http://www.microsoft.com/en-us/download/confirmation.aspx?id=39257 的此修复程序更新 .NET Framework 4.0 就我而言,这非常有效。

    【讨论】:

      【解决方案4】:

      将代码放入您的 WebConfig:2017-2018 年工作

        <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="X-UA-Compatible" value="IE=Edge" />
          </customHeaders>
        </httpProtocol>
        </system.webServer>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 2014-07-08
        • 2011-03-27
        相关资源
        最近更新 更多