由于周末,早晨起来的比较晚,打开博客园转转,看到这样的一篇博文,内容大致是说,服务器由于升级导致的用Asp.NET的UpdatePanel写的下拉联动失效了,这让我联想到了前段时间看到的一份资料,关于IE10和Asp.NET的故事。

博客园中看到的博文:

记录asp.net在IE10下事件丢失排错经过  http://www.cnblogs.com/weapon/p/3150584.html

博主最后总结 出的结论如下:

asp.net4.0出生得比IE10早,所以asp.net4.0以前版本不认识IE10 的 User-Agent 标头,导致的后果就是ASP.NET 特定功能失效。

导致这个问题的原因大致就是这样的,这个是微软官方给出的bug及升级补丁(下文中也有详细介绍关于IE10的问题)。

http:/msdn.microsoft.com/en-us/library/ie/hh869299(v=vs.85).aspx

下面我就目前了解的微软新版本IE10或者IE11与IE10一下浏览器的区别和可能遇到的问题整理了下,贴出来供大家参考,难免有疏漏或者错误的地方,欢迎留言帮忙指正,共同进步。

第1章 网站迁移简介

1.1 网站开发过去和现在

  在过去专门针对IE6开发的系统中可能存在一些现在主流高版本浏览器不兼容的代码或样式,过去和现在Web开发的现状如下图。

  IE版本从6升级到10过程中,由于IE10执行较新的Web标准,在IE9之前正确执行的代码或渲染的样式,在IE10中可能会失效,具体会在后面总结到。

1.2 解决兼容性方法

  解决兼容性方法主要有两个:修复、备选方案。

1.2.1 修复

可以通过设置网页的兼容视图/ 或者调整GPO完成修复。

了解下IE新版本带来的变化:

每次使用一个新版本的浏览器,网站总是出错,导致此类问题的原因一般如下:

用条件注释来判断浏览器版本,如:

<!-[if gte IE 5.5] <p>you are using IE5 or higher</p> <![endif]->

用用户代理串User Agent String判断浏览器类型,如:

注意:

(1)       在IE10中不再支持条件注释语句,所以旧版本的web在IE10中可能显示不正确。

(2)       在IE10的兼容性视图中,User-Agent会变为IE7,如果代码是通过这样方式判断,则不能处理后期新出现的用户较多的浏览器的支持。

(3)       在旧版的服务器中,存在一个BUG,此bug将会导致服务器不会接收来自IE10的请求,需要升级服务器补丁,详细请见MSDN:

链接地址:http://msdn.microsoft.com/en-us/library/ie/hh869299(v=vs.85).aspx

如何缓解兼容性问题:

  普通用户,使用兼容试图按钮

  开发人员:使用X-UA-Compatible,限制浏览器显示模式

  管理人员:列出兼容性试图,提交微软,强制限制网页显示模式

  处理专为IE6开发的网站应用显示问题的方法:

关于Quirks模式介绍:

  IE浏览器兼容性视图显示的一种,如图。

  但在IE10下,Quirks模式既支持最新的html标准,也支持IE老版本的标准;IE 5 Quirks模式只支持IE老版本的标准。

  在IE9下,Quirks模式只支持IE老版本的标准。

1.2.2 备选方案

  1.加入Browsium ION加载项,一个轻量级的可使用在IE9/10上的浏览器插件,可以显示专为IE6/7所设计的网页,但需要授权费用,详细见网址:

http://www.browsium.com/ion/

  2. Microsoft Enterprise Desktop Virtualization (MED-V) ,让IE6运行在本地的一个虚拟化的XP实例中。

http://technet.microsoft.com/zh-cn/library/gg548505.aspx

3. Terminal Services(终端服务) 使用Windows 2003的Terminal Service把IE6发布为Remote App。

4. 在Windows 8上面使用Hyper-V客户端 IE6可以运行在一个Hyper-V的虚拟机上。

第2章 兼容性测试工具介绍

2.1 Application Compatibility Toolkit

  Application Compatibility Toolkit (ACT) 帮助您确定在部署之前,您的应用程序是否与新版本的 Windows 兼容,还有助于您确定操作系统新的如何影响将这些应用程序。

  它可以:

  实时查看基于 Web 的问题

  IECTT 使您能够在对 Internet Explorer 7 和 Internet Explorer 8 测试网站和 Web 应用程序时随时找到并查看基于 Web 的问题。完成测试之后,可以在 IECTT 的 Live Data 屏幕中查看结果。

  将 Web 问题上载到 ACT 数据库中

IECTT 使您能够将基于 Web 的问题上载到 ACT 数据库中(ACT 数据库会处理这些信息),并使您能够在应用程序兼容性管理器的 Analyze 屏幕上查看结果。

2.2 Compat Inspector

Compat Inspector 是一种基于 JavaScript 的测试工具,可在站点运行时分析站点。Compat Inspector 报告导致在标准模式中出现问题的交互模式。这使您能够迅速识别问题,而无需熟记大量文档,无需在站点的全部代码中进行搜索。但Compat Inspector 只能在IE9,10下的标准方式下运行。

使用方法访问:http://ie.microsoft.com/testdrive/HTML5/CompatInspector/

集成在网页中,及在网页中加载一段js。

<script src="http://ie.microsoft.com/TestDrive/HTML5/CompatInspector/inspector.js"></script>

    同时也可以集成到fiddler中。

使用时会在网页右侧显示结果,如图

  点击右上角的简要报告,进入到报告细节

  使用说明:

  详细指出页面存在的兼容性问题

  在Tests的tab中可以选择要测试项目是否测试。

  在Messages下的详细列表中有debug选项,如图

  可以直接开启浏览器的F12调试,自动进入有问题的断点。

2.3 Modern.IE

Modern.IE是由微软官方发布的一款在线测试软件,开发人员可通过这组工具来测试自己的网站在新一代的 IE9、IE10或旧版浏览器上的效果,modern.IE 的程序侦测精灵(code detection wizard)能够扫描并辨识出可能影响使用体验的常见错误。

请访问http://www.modern.ie/zh-cn查看详情。

比如检测http://www.baidu.com  modern.IE给出如下报告,说明了该网页存在的一些问题,并指出解决这些问题的方法。

第3章 常见的兼容性问题

3.1 文档模式

文档模式(<!DOCTYPE>)定义了IE浏览器如何来展示网页,<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。

该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

详细的标准及最终解析的标准见下图(Q:Quirks模式,S:标准模式):

详情请点击:http://msdn.microsoft.com/en-us/library/ff955379(v=VS.85).aspx

  如何制定页面的文档模式。

  使用 meta 元素,以在网页中包含 X-UA-Compatible http-equiv 标头。

  例如:

    • <meta http-equiv="x-ua-compatible" content="IE=7" >

    • <meta http-equiv="x-ua-compatible" content="IE=EmulateIE7" >

    • <meta http-equiv="x-ua-compatible" content="IE=edge" >

    • <meta http-equiv="X-UA-Compatible" content="IE=7,9,10" >

  关于IE=7和IE=EmulateIE7的区别:

  如果是写IE=7,指一定要再ie7下运行

  如果是IE=EmaluteIE7,这种写法会根据文档模式docment type判断加载模式,其次才依据代码限制的IE=EmaluteIE7执行。

3.2 用户代理串

  当访问网站的时候,浏览器会发送一个User-Agent字符串给服务端,以表明浏览器类型、版本、操作系统类型等。Web服务器端可以根据这些信息返回不同的网页信息。

  通常情况下,很多网页开发人员喜欢通过”User- Agent”头信息来判断用户使用的是何种浏览器(称为浏览器检测),这种方式存在极大的兼容性隐患。

例如使用如下方式实现检测:

  以下情况,该代码会失效:

(1)    新的浏览器发布或浏览器更新,此时需要修改代码。

(2)    推出的新设备中往往包含新版本的浏览器。

(3)    许多浏览器支持修改用户代理 (User-Agent) 头信息的功能。

  推荐做法-使用更能检测(Feature Detection)

3.3 条件判断

  在早期版本的IE浏览器中,可以使用条件判断语句来判断是否是IE浏览器,以及其版本号,例如:

<!--[if IE 8]> <p>Welcome to Internet Explorer 8.</p> <![endif]-->

  IE10已经不再支持条件判断•使用条件判断就如同使用User-Agent判断浏览器类型一样,存在类似的弊端•正确的做法是采用Feature Detection

3.4 脚本错误

  IE10采用最新的web标准,可能之前能运行在IE9之前的脚本在IE10下会报错,例如。

  报错原因即为元素的Id名称大小写不一致。

  又如,IE10下不再支持滤镜效果,许多基于脚本的滤镜效果会失效,报出错误,如图。

  因此,为了尽量避免网站在IE9/10上发生兼容性问题,在开发一个新的Web应用或者对旧应用进行改版之前,开发人员务必先学习IE9和IE10的兼容手册:

  http://msdn.microsoft.com/en- us/library/ie/ff986083(v=vs.85).aspx

  http://msdn.microsoft.com/en- us/library/ie/hh801219(v=vs.85).aspx

3.5 样式错乱

  有些网页在IE10下出现显示错乱,往往是因为没有按照web标准来定义样式所致,如web标准中定义text-align如下:

text-align 属性规定元素中的文本的水平对齐方式。

  如果有如下的html样式定义,IE10就会出现表格不居中显示,而IE9之前是居中显示的:

  <div style=”text-align:center;”>

<table><tr><td>我要在中间</td></tr></table>

  </div>

第4章 常见兼容性问题排错

4.1 常见问题

1.页面显示问题–显示位置错乱、颜色不对、排列不整齐、该显示的内容没有显示等

2.功能问题–点击按钮没有反应、动画内容不播放、业务功能无法完成等

3.脚本报错–弹出Javascript报错框

4.ActiveX错误– ActiveX控件无法安装、ActiveX控件不加载、 Flash不播放等

4.2 如何排错

  1. 简化页面,尽量用最简单的页面来重现问题

  2. 审查文档模式,尝试使用各个文档模式来显示页面

  3. 对问题进行归类:显示问题、功能问题、脚本报错或是 ActiveX问题

  4. 审查网页的源代码

  5. 使用工具对网页进行排错

第5章 调试工具介绍

5.1 F12 Developer Tools

  F12开发人员工具是一套内置于IE9/10的网页调试工具,可以调试以下问题:

  - HTML

  - CSS

  - JS脚本错误和脚本性能(探查器tab)

  - 网络传输

5.2 Fiddler

  Fiddler是一个HTTP调试工具,适用于调试以下问题:

(1)   网络上的问题

(2)   HTTP Response 错误

(3)   缓存

(4)   代理服务器问题

(5)   服务端的问题

(6)   服务端发回错误的Response

可适用于这些场合:

(1)   服务端通过User-Agent判断浏览器类型

(2)   Ajax请求的问题

(3)   响应时间问题

(4)   HTTP安全(cookies丢失, 非法SSL)

(5)   可以查看HTTPS的包

(6)   可以把结果保存以便日后重播

操作界面如图:

  详情可以查看详细介绍:

  http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html

5.3 Network Monitor

  下载地址:

  http://www.microsoft.com/en- us/download/details.aspx?id=4865

  Network Monitor可以用来监控网络活动

(1)   实时抓取并显示结果

(2)   可以同时抓取多块网卡上的网络活动

(3)   可以保存日志以备日后打开分析

  适用场合:

(1)   网络底层的连接问题(比如代理服务器问题)

(2)   Web Proxy Auto Discovery Protocol (WPAD)

(3)   审查每一个TCP包的具体内容

  本人表达能力有限,只是整理了旧版网站迁移到IE10及更高版本浏览器可能出现的问题和相关解决方案,欢迎大家指正,谢谢!

之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总的更多相关文章

  1. 使用Java开发高性能网站需要关注的那些事儿

    无论大型门户网站还是中小型垂直类型网站都会对稳定性.性能和可伸缩性有所追求.大型网站的技术经验分享值得我们去学习和借用,但落实到更具体的实践上并不是对所有网站可以适用,其他语言开发的网站我还不敢多说, ...

  2. SharePoint Server 2013开发之旅(二):使用在线的开发人员网站进行SharePoint App开发

    上一篇我已经介绍了新版本的SharePoint Server提供了四种主要的开发场景,其中一个全新的App开发模型让我们眼前一亮.这一篇我将介绍如何在线进行SharePoint App开发. 谈到Sh ...

  3. 10个很棒的学习Android 开发的网站(转)

    看到江湖旅人 写的<10个很棒的学习iOS开发的网站 - 简书>,所以就忍不住写Android 啦,也希望对大家有帮助.我推荐的网站,都是我在学习Android 开发过程中发现的好网站,给 ...

  4. 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

    使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 摘要: 主要讲解初期的开发环境搭建,Maven的简单教学. 访问GitHub下载最新源码:https://github.com/ ...

  5. 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

    原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定 ...

  6. thinkphp5开发的网站出现”No input file specified”(php版本5.6.27)

    thinkphp5开发的网站出现”No input file specified”(php版本5.6.27) 一.总结 一句话总结:搜索引擎一定要用google,比百度节约时间一万倍,google啊, ...

  7. 后台管理-基于 Bootstrap 开发的网站后台管理面板

    Bootstrap 开发框架真的很强大,今天推荐几个非常不错的基于 Bootstrap 开发的网站后台管理面板,全部都是响应式布局,细节做得都很不错.可以搜索keenthemes. Metronic ...

  8. 使用IntelliJ IDEA开发SpringMVC网站的学习

    最近开始了“使用IntelliJ IDEA开发SpringMVC网站”的学习,有幸看到一份非常完善的学习资料,笔者非常用心的详细注释了一份关于博客的开发过程和细节,并且在评论中回复大家提出的问题,非常 ...

  9. Java开发高性能网站需要关注的事

    转自:http://www.javabloger.com/java-development-concern-those-things/ 近期各家IT媒体举办的业内技术大会让很多网站都在披露自己的技术内 ...

随机推荐

  1. MySQL innodb中各种SQL语句加锁分析

    概要 Locking read( SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),UPDATE以及DELETE语句通常会在他扫描的索引所 ...

  2. Shell 脚本合集

    0. 说明  Shell 脚本合集 1. xcall.sh xcall.sh 编写为了为了同时对多台服务器进行操作,编写完成之后,将其发送到 /usr/local/bin 下 #!/bin/bash ...

  3. fedora27安装谷歌浏览器Chrome

    安装 添加chrome源 #cd /etc/yum.repos.d #wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo 安装Chr ...

  4. Redis上踩过的一些坑

    来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DB ...

  5. Spring-AOP SpringBoot自动配置和启动Spring AOP

    SpringBoot 会使用 @Conditional* 注解来进行判断是否需要自动启动 AOP,如果 classpath 下有 spring-aop 的 jar 和有 EnableAspectJAu ...

  6. 漫画:高并发下的HashMap

    这一期我们来讲解高并发环境下,HashMap可能出现的致命问题. HashMap的容量是有限的.当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高. 这时候 ...

  7. str操作方法

    s = 'dsj,fhk,je,f' # s1 = s.split(',') # print(s1) s = 'aleX leNb' s1 = s.strip() print(s1) s2 = s[2 ...

  8. LFS 8.3 中文翻译版本发布!

    导读 很多同学都已经学习了 Linux ,可能已经在自己的机器上安装过 Linux,甚至都能搭建个简单的个人博客,也有可能编译部署过邮件服务器之类的软件,可是感觉仍然对 Linux 有点摸不着,颇有隔 ...

  9. STL 1–迭代器std::begin()和std::end()使用

    迭代器是一个行为类似于指针的模板类对象.只需要迭代器iter指向一个有效对象,就可以通过使用*iter解引用的方式来获取一个对象的引用.通常会使用一对迭代器来定义一段元素,可以是任意支持迭代器对象的元 ...

  10. Ubuntu安装Chromium浏览器

    今天介绍一下谷歌浏览器在ubuntu 系统环境下的安装步骤,1.在终端的窗口上输入: sudo wget http://www.linuxidc.com/files/repo/google-chrom ...