【问题标题】:CrossPostback ,AJAX Controls and ASP.NET generated postbacks work for .NET 4.5 , not .NET 4.0 in IE 11CrossPostback、AJAX 控件和 ASP.NET 生成的回发适用于 .NET 4.5,而不适用于 IE 11 中的 .NET 4.0
【发布时间】:2013-08-03 07:05:51
【问题描述】:

我之前已经发布并回答了这个问题。WebResource.axd not working with Internet Explorer 11
但我认为修补程序已经解决了这个问题(CrossPostback、AJAX 控件和 ASP.NET 生成的回发不起作用)但是在 QA 中安装后,它没有t 工作,我们意识到是 .NET 4.5 让事情变得正常。
我正在比较 .NET 4 和 .NET 4.5 之间的 .NET frameworks 文件夹。我需要问的是 .NET 4.5 中什么可以真正解决 IE 11 问题。
IE 11 的主要变化是用户代理字符串。 .NET 4.5 中的哪些特定修复可以解决 ASP.NET 4.0 和 IE 11 之间的差异。
如果将来在 .NET 4.0 中安装了安全/热修复程序,这些文件可能不会像将来那样手动合并差异真正有帮助可能会被覆盖。
另一个提示,问题是 Windows 7、8、8.1 中的 IE 11 任何帮助或建议。
更新:我们尝试仅将 .NET 4.5 的浏览器定义注册到 .NET 4.0 中,但问题仍然存在,除了定义之外,还有一些库可以使事情正常进行在 IE 11 中。

【问题讨论】:

  • 这不是关于“库”,而是关于 UA 字符串及其解释。你安装了这个吗? support.microsoft.com/kb/2836947
  • 我已经为 .NET 4.0 安装了“遇到脚本错误”、“'__doPostBack' 未定义”的所有修补程序
  • 我正在尝试在 IE 11+ Windows 8.1 中访问网页。我得到空白页。由于这个问题,似乎不支持 java 脚本。任何建议
  • 我们架构师说的唯一修复和事实上是.NET 4.5,直到 IE 11 和 .NET 4.0 解决补丁,这是真正的修复,否则,您将不得不降级客户端设置上层。

标签: asp.net .net asp.net-ajax internet-explorer-11


【解决方案1】:

我们遇到了类似的问题,即 DropDownList 的自动回发在较新版本的 IE 中停止工作。我们首先在 IE10 中发现了它,并将其跟踪到许多人都知道的浏览器定义错误,其中详细说明了 here 等。

对于这个特定的应用程序,以及运行/运行不同环境的一组盒子,升级到 4.5 不是近期的选择。更重要的是,当我们尝试安装它时,上面帖子中详述的机器范围的修复出错了。然而,站点范围的修复确实起到了作用。

一两周后,有人碰巧用 IE11 Preview 访问了该网站,问题又出现了。我们进行了更多研究,发现站点范围修复中的浏览器定义“IE10Plus”(实际上确实修复了 IE10 问题)不适用于 IE11。为了识别 IE10,添加了一个主要版本正则表达式匹配 - “\d{2,}” - 匹配两位数字(与之前的匹配“^9$”相反 - 完全匹配“9”)和IE10 现在工作了。问题是 IE10Plus 定义(以及它之前的每个 IE 定义)最终源自“IE”定义,并且该定义还要求 UA 字符串中包含“MSIE”(除其他外),并且从 IE11 开始,“ MSIE" 不再是 UA 字符串的一部分。

“IE10Plus”真的应该叫“IE10”。

鉴于我们无法在短期内升级到 4.5,我们不得不寻找另一个解决方案。我们遇到的一个问题是创建我们自己的 IE11 浏览器定义。除了我们在 IE10 中看到的功能之外,我们无法定义任何功能,但这非常接近,至少它可以识别浏览器(并且不会像发生的那样降低功能)。

人们会告诉你不要这样做,但对于某些人(比如我们)来说,它确实提供了一个临时修复,直到最终解决方案出现。

我不知道 4.5 应该以什么方式解决这个问题。我查看了浏览器定义文件,但没有看到它们识别 IE11 的方法(其 UA 字符串中没有“MSIE”),但也许在某个 DLL 中隐藏了一些额外的修复。

无论如何,这是我们创建的定义,对我们来说,它立即解决了问题。

在您的项目中,添加(或创建为)App_Browsers/ie.browser,如下:

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko -->
<browser id="IE11Preview" parentID="Mozilla">
    <identification>
        <userAgent match="Trident/(?'layoutVersion'\d+).*rv:(?'revision'(?'major'\d+)(\.(?'minor'\d+)?))" />
        <userAgent nonMatch="MSIE" />
    </identification>

    <capabilities>
        <capability name="browser"              value="IE" />
        <capability name="layoutEngine"         value="Trident" />
        <capability name="layoutEngineVersion"  value="${layoutVersion}" />
        <capability name="isColor"              value="true" />
        <capability name="screenBitDepth"       value="8" />
        <capability name="ecmascriptversion"    value="3.0" />
        <capability name="jscriptversion"       value="6.0" />
        <capability name="javascript"           value="true" />
        <capability name="javascriptversion"    value="1.5" />
        <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" />
        <capability name="revmajor"             value="${major}" />
        <capability name="revminor"             value="${minor}" />
    </capabilities>
</browser>

如果您要添加到现有文件,请查找 id="IE10Plus" - 您可能需要将其更改为 id="IE10",因为“Plus”部分不再准确。

正如我所说,如果您可以升级到 4.5,它可以解决您的问题 - 太好了。如果你不能,或者它不能,这可能会阻止你直到你可以(或直到出现其他修复)。

【讨论】:

  • 谢谢迈克尔,还没试过,一定会告诉你的。
  • FWIW,我刚刚提出了另一台运行 4.5 的服务器,它与 IE11 完美配合。我认为,浏览器定义是有意义的,并且 - 作为“股票” - 比这个更可取。
  • 我在 Windows Server 2003 上运行一个站点,如果不移动到新服务器就无法升级到 .NET 4.5。当 IE10 发布时,我通过安装 Scott Hanselman 的 NuGet 包解决了这个问题,该包将 ie.browser 和 firefox.browser 添加到 App_Browser 文件夹。我尝试将您的 IE11Preview 定义添加到 ie.browser 文件并重新启动该站点,但它仍然不适用于 IE 11 Preview (Windows 8.1)。有什么想法吗?
  • @Adhooo - 究竟是什么不起作用?你的 F12 设置是什么?你能在页面的某处添加 "" 和 "()) %>" 看看它们是什么返回?
  • 我得到 __doPostBack 未定义。 IIS 无法正确检测到 IE11。我已经为 Windows Server 2003 和 .NET 4 安装了修补程序 (hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx),但仍在等待系统管理员重新启动服务器。 Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) 像 Gecko 默认|mozilla
【解决方案2】:

你好试试下面的脚本它可能对你有帮助。

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance()._origOnFormActiveElement = Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive;
Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive = function (element, offsetX, offsetY) {
if (element.tagName.toUpperCase() === 'INPUT' && element.type === 'image') {
offsetX = Math.floor(offsetX);
offsetY = Math.floor(offsetY);
}
this._origOnFormActiveElement(element, offsetX, offsetY);
};
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2011-02-09
    • 2016-07-27
    • 2014-10-16
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多