NuGet与IE10兼容

材料:vs2010,项目源文件

操作:

①在2010上装NuGet

工具》扩展管理器》在线安装NuGet程序包

②输入命令:"Install-Package App_BrowsersUpdate",  然后回车,稍等片刻

③修改  App_Browsers》ie.browser内容

可以添加:

<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>

以上方法治标不治本!

借阅:

以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及PostBack的操作仅在IE10下都无效,其他版本浏览器都没有问题,本机调试也没有问题。

这也就是说在程序相同的情况下,架设在不同服务器会产生这样的问题,客户端的IE10产生异常。那要么是IE10有问题,要么就是IIS或Framework有问题。

这确实让人困惑,去问了万能的度娘,她给我了一篇博客,我仔细看了看,额,猜想差不多正确。在IE10下,右键查看网页源代码,果然没有_doPostBack()。因为.Net的服务器控件(例如DropDownList)回传就依赖的是这个方法来实现的,若没有这个js方法,回传肯定无动于衷啊。

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms[‘aspnetForm‘];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>]
</script>

可为什么会不生成_doPostBack()函数呢,这是Framework该做的事情啊!查阅微软补丁帮助文件得知,原来IE10浏览器的头文件并不是.NET Framework可识别的Mozilla/5.0 (compatible; Framework无法识别这是什么浏览器,不向其发送_doPostBack()方法,才导致了这个问题的发生。

究其原因,因为IE10是新浏览器,在设计的时候没有考虑到Framework的识别问题,属于微软内部两支团队的沟通不及时导致的BUG,然而我们的大部分人不喜欢打补丁,觉得补丁和自己毫不相干,这才会产生这样那样的奇怪问题的产生。这也就解释了为什么自己电脑做服务器时可以,服务器却不可以的问题了。

问题都找出来了,解决办法有很多,微软早已经发布了补丁(2011.8.24-8.25,当时win8 preview 未发布),补丁地址如下:

Framework2.0

http://hotfixv4.microsoft.com/.NET%20Framework%202.0%20-%20Windows%20%202000,%20Windows%202003,%20Windows%20XP%20(MSI)/sp2/DevDiv953278/30729.5725/free/437012_intl_x64_zip.exe

Framework4.0

http://hotfixv4.microsoft.com/.NET%20Framework%204.0%20-%20Windows%20XP,%20Windows%202003,%20Windows%20Vista,%20Windows%20Server%202008,%20Win7,%20Windows%20Server%202008%20R2%20(MSI)/nosp/DevDiv953277/30319.504/free/436907_intl_x64_zip.exe

下载补丁,安装即可。但有时会出现补丁安装不上的情况,具体原因不清楚(可能是系统安装了其他补丁导致版本差异安装不上),

另附上手动声明App_Browsers的方法避免此BUG:

在工程下添加App_Browsers文件夹,然后在下面添加名如IE10Fix.browser文件,写入:

<!--可在 <windir>/Microsoft.NET/Framework/<ver>/CONFIG/Browsers 中找到现有的浏览器定义--><browsers>  <browser refID="Default">    <capabilities>      <!-- To avoid wrong detections of e.g. IE10 -->      <capability name="cookies" value="true" />      <capability name="ecmascriptversion" value="3.0" />    </capabilities>  </browser></browsers>

编译发布即可。

参考文章:http://blog.csdn.net/smeyou/article/details/9033663

http://www.ablanxue.com/prone_7061_1.html

http://support.microsoft.com/kb/2600100/zh-cn

时间: 2024-11-08 03:39:40

NuGet与IE10兼容的相关文章

.NET Core + EF 报nuget包不兼容

错误信息如下: 严重性 代码 说明 项目 文件 行 禁止显示状态错误 NU1107 Microsoft.EntityFrameworkCore 中检测到版本冲突.直接安装/引用 Microsoft.EntityFrameworkCore 2.2.4 到项目 CoreWeb 可解决此问题. CoreWeb -> CoreWeb.Entities -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrame

MVC .NET4 IE10下FormsAuthentication.SetAuthCookie无效的问题

最初的问题是网站在IE10下不兼容,使用兼容性代码:<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"> 让IE强制使用兼容模式,但是这种情况在有的电脑上没有管理员权限的时候是无效的, 即用IE打开了使用上面这段代码的页面后,按F12, IE的模式还是IE模式,不是想要的IE10兼容模式. 在有管理员权限的电脑上,变成了IE10兼容模式,问题解决. 另外FormsAuthenticati

快速学习Flex模型布局-兼容新旧版本css

最近在学习Flex模型布局 ,刚开始,各种属性看着头疼,现在坚持下来,把自己的学习经验分享一下: Flex模型 发展下来分三个版本: 标准版本(flex | inline-flex).混合版本(flexbox | inline-flexbox).最老版本(box | inline-box); 标准版本:IE11+已经支持啦,其他标准浏览器只要做一下兼容webkit: 混合版本:可以说是IE版本,就只有ie支持 最老版本:建议抛弃吧 --------------------------------

调整.NET控件WebBrowser的默认浏览器内核

今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件.但是却发现了一件很神奇的事情: 当前浏览器使用的内核,可以通过登录下面这个网站获取:http://ie.icoa.cn/ 我的IE版本为IE8,在使用IE登录页面的时候,使用的内核是IE8,登录该网站的截图如下: 但是当我用WebBrowser登录该页面时,显示使用的内核却是IE7: 上图的程序是一个测试程序,仅包含一个WebBrowser,这个程序的名称是TestWebBrowser.exe.可以

.NET Core 2.0 正式发布信息汇总

万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Standard 2.0的正式发布是.NET 开源跨平台的一个重大里程碑, 可以激活庞大的10几年以来各大公司和社区.NET 平台上的投资,这是个重大的事件,就像是股票的最低谷开始向上爬升的拐点.我们先来汇总下微软官方发布的.NET Core 2.0相关的博客: Announcing .NET Standard 2.0 Announcing .

判断浏览器的版本以及浏览器内核

if (!browser.ie && !browser.mac) { var UA = navigator.userAgent.toLowerCase().toString(); //判断是不是IE内核下的非IE版本 if ((UA.indexOf('360ee') > -1) || (UA.indexOf('360se') > -1) || (UA.indexOf('se') > -1) || (UA.indexOf('aoyou') > -1) || (UA.i

java 使用 comet4j 主动向客户端推送信息 简单例子

[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我惊呆了,因为完全没听过,赶紧上网搜集资料,耗了一个晚上写了个简单的例子,实现主动向客户端发送信息.说是说主动,其实还是要客户端先献出它的“第一次”,即只要它有先请求你一下,以后你们熟了,你想主动约它就约它! 关于comet技术介绍及其实现原理,可以参考网站 http://www.ibm.com/de

判断浏览器内核(转)

/*   * @desc   判断浏览器的版本以及浏览器内核   * @author wangyanling   *  */  if (!browser.ie && !browser.mac) {   var UA = navigator.userAgent.toLowerCase().toString();     //判断是不是IE内核下的非IE版本     if ((UA.indexOf('360ee') > -1) || (UA.indexOf('360se') > -

调整WebBrowser的默认浏览器内核版本

原文出自:https://my.oschina.net/Tsybius2014/blog/492107 注:这个是写.net控件,其实delphi是一样的.作者已经写的比较全面了,我只是做了一点修改 当前浏览器使用的内核,可以通过访问下面这个网站获取:http://ie.icoa.cn/ 我的IE版本为IE8,在使用IE登录页面的时候,使用的内核是IE8,登录该网站的截图如下: 但是当我用WebBrowser登录该页面时,显示使用的内核却是IE7: 上图的程序是一个测试程序,仅包含一个WebBr