码迷,mamicode.com
首页 > 其他好文 > 详细

NuGet与IE10兼容

时间:2015-10-29 16:18:43      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:

材料: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

NuGet与IE10兼容

标签:

原文地址:http://www.cnblogs.com/vakeynb/p/4920589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!