【问题标题】:Compatibility problems with Internet Explorer 10/11 and an old .net framework 1.1 websiteInternet Explorer 10/11 和旧的 .net framework 1.1 网站的兼容性问题
【发布时间】:2013-06-22 12:41:03
【问题描述】:

情景

我有一个用 .net(框架 1.1)开发的非常古老的网站。该网站存在多个 Internet Explorer 10/11 问题,可以使用兼容性视图进行修复。

问题

问题是框架 1.1 无法将 Internet Explorer 10/11 识别为高级功能浏览器,因此当使用 Internet Explorer 10/11 的用户访问该网站时,许多功能(例如 javascript 代码)被禁用。

Microsoft 为 .net framework 版本 >=2.0 发布了修补程序来解决此问题,但不适用于 framework 1.1。

我已经尝试过的

  1. 我尝试在 web.config 中强制使用 IE7 兼容模式,或者在 IIS 中添加 HTTP 标头,或者直接在 html 页面中添加:

    <meta http-equiv="X-UA-Compatible" content="IE=7" />
    

    但这不是一个有效的解决方案,因为由于 1.1 框架问题,仍然缺少 javascript 代码。

  2. 我发现唯一可行的解​​决方案是在浏览器中手动设置兼容性视图,但我的一些客户在激活兼容性视图时遇到问题,因为他们对 PC 没有信心。

我的两分钱

我知道最好的解决方案可能是将整个项目转换为更新版本的框架(> = 2.0),不幸的是,该项目很大并且转换会非常复杂(该解决方案包括很多其他项目、较旧的经典 ASP 部分、Crystal Reports 报表等...)

真正的问题

是否有不需要最终用户进行项目转换或手动操作的解决方案?

【问题讨论】:

  • 不确定它是否会起作用,但有一个适用于 IE10 的 appBrowsers 文件可以解决链接按钮等问题,如果您的项目可以接受,可能会添加它。 fkauffmann.blogspot.ie/2012/01/…
  • 如果appBrowsers 不起作用,您可能需要查看browserCapsfrom MSDN
  • 项目8年了还没更新?我意识到这是一个需要更新的复杂项目,但它并没有像昨天被弃用...
  • support.microsoft.com/lifecycle/search/… .NET 1.1 将在 3 个月内消亡。唯一的解决方案是你已经知道的,升级。

标签: asp.net internet-explorer internet-explorer-10 internet-explorer-11 asp.net-1.1


【解决方案1】:

首先:X-UA-Compatible 标签必须是

部分中的第一个标签。

尝试使用 emulate 选项,它允许 quirks 模式:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

此外,众所周知,从页面中完全删除“DOCTYPE”有助于强制兼容模式或在顶部放置类似 xml 声明的内容

<?xml version="1.0" encoding="UTF-8">

【讨论】:

    【解决方案2】:

    编辑 web.config 文件并在 &lt;system.web&gt; 部分添加

        <browserCaps>
            <case match="IE[ /](?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))">
                browser=IE
                version=${version}
                majorversion=${major}
                minorversion=${minor}
                frames=true
                tables=true
                cookies=true
                javascript=true
        javaapplets=true
                activexcontrols=true
                ecmascriptversion=1.5
                vbscript=true
                backgroundsounds=true
                isMobileDevice="true"
                <filter match="[4-9]" with="${major}">
                    ecmascriptversion=1.3
                    css1=true
                    css2=true
                    xml=true
                    <filter match="[5-9]" with="${major}">
                        w3cdomversion=1.0
                    </filter>
                  </filter>
                  <filter match="^b" with="${letters}">
                   beta=true
                </filter>                                                               
             </case></browserCaps>
    

    【讨论】:

    • 很好的解决方案。适用于我们的 1.1 应用程序。无需重新编译。
    【解决方案3】:

    尝试为此配置 IIS -

    在 IIS 中添加自定义 HTTP 响应标头

    要在 IIS 中的网站级别、文件夹级别或虚拟目录级别添加自定义 HTTP 响应标头,请按照您正在使用的 IIS 版本的步骤操作。

    基于 Windows Server 2008 的 Web 服务器上的 IIS 7

    1. 启动 IIS 管理器。为此,单击开始,单击运行,键入 inetmgr, 然后点击确定。
    2. 在“连接”下,双击所需的服务器,然后 双击站点。
    3. 单击您所在的网站、文件夹或虚拟目录 想要添加自定义 HTTP 响应标头。
    4. 在 Home 下,双击 HTTP Response Headers in IIS 部分。注意占位符是指 网站名称。
    5. 在“操作”下,单击“添加”。
    6. 在名称框中,输入 X-UA-Compatible。
    7. 在“值”框中,键入 IE=EmulateIE7。
    8. 点击确定。

    IIS 6 及更早版本

    1. 单击“开始”,单击“运行”,在“打开”框中键入 inetmgr.exe,然后 点击确定。
    2. 展开所需的服务器,然后展开网站。
    3. 右键单击网站、文件夹或虚拟目录 您想要的,然后单击“属性”。
    4. 在 HTTP 标头选项卡上,单击自定义 HTTP 标头下的添加。
    5. 在“自定义标题名称”框中,键入 X-UA-Compatible。
    6. 在自定义标头值框中,键入 IE=EmulateIE7。
    7. 点击确定两次。

    更多详情请看link

    【讨论】:

      【解决方案4】:

      我设法找到了一个解决方案:基本上我将我的应用程序重新定位为在 Framework 4.0 下运行,而该应用程序仍使用 Framework 1.1 编译。

      为此,我关注了this MSDN 页面。摘录如下:

      您可以重新定位应用程序以在 .NET Framework 4 下运行。重新定位要求您向应用程序的配置文件中添加一个元素,使其能够在 .NET Framework 4 下运行。此类配置文件采用以下形式:

      <configuration> 
         <startup>
            <supportedRuntime version="v4.0"/>
         </startup>
      </configuration>
      

      所以我的问题分两步解决:

      1. 将此部分添加到 Framework 1.1 Web 应用程序的 web.config 文件中:

        <configuration> 
           <startup>
              <supportedRuntime version="v4.0"/>
           </startup>
        </configuration>
        
      2. 在 IIS 中创建一个新的应用程序池,并将旧的 Framework 1.1 Web 应用程序配置为在新创建的池中与 Framework 4.0 一起运行

      现在应用程序在 Framework 4.0 下运行,因此可以正确识别新浏览器并提供高级功能。

      【讨论】:

        猜你喜欢
        • 2018-03-25
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多