IE6升级到IE11兼容性问题和操作手册
2015/3/2 Bob Liu
目录
概述... 2
第一章:HTML. 3
第一节:IE7-IE8更新... 3
1. 如果缺少结束标记的 P 元素后跟 TABLE、FORM、NOFRAMES 或 NOSCRIPT 元素,会自动添加结束标记。 3
2. 支持格式正确的有效标记,不再支持格式错误的 HTML。... 4
3. Button标签的默认type类型从button改为submit。... 5
4. 不再支持 COL 及 COLGROUP 元素的部分属性及为其设定的CSS 特性.6
第二节:IE8-IE9更新... 7
1. 表对象模式现在更加符合其他浏览器。... 7
2. 文本布局使用自然度量而不是图形设备接口 (GDI) 度量。... 9
第二章:CSS. 11
第一节:IE6-IE7更新... 11
1. 方框模型溢出内容现与方框相交,不再让方框自动增长适应内容。... 11
2. 不再支持某些CSS 筛选器(如 *HTML、_underscore和 /**/ 注释)。... 13
3. 已解决SELECT元素不能被div覆盖的问题。... 15
4. CSS样式区分大小写。... 16
5.Style中的height,width结尾需要输入单位,如px. 16
第二节:IE7-IE8更新... 17
1. 不再支持 CSS 表达式,改为支持增强的 CSS 或 DHTML 逻辑。... 17
第三节:IE8-IE9更新... 18
1. 泰语和东亚语文本和字体大小的显示可能小于其他字样。... 18
2. 某些行为连接方法在 XML 模式中不可用。... 19
第四节:IE9-IE10更新... 20
1. 不再支持 CSS behavior,完全废弃htc表达式。... 20
第三章:Javascriptand DOM.. 21
第一节:IE6-IE7更新... 21
1. 不再允许用于绕过 window.close 提示的 window.opener 技巧。... 21
2. 从脚本创建的模式或无模式对话框看起来似乎稍微变大。... 21
第二节:IE7-IE8更新... 22
1. 支持“class”语法,不再支持“className”属性语法。... 22
2. 属性集合不再包含 Internet Explorer 可识别的所有可能属性。... 23
3. 属性排序已更改,影响了属性集、innerHTML 和 outerHTML。... 24
4. GetElementById区分大小写,且不再搜索名称属性。... 24
5. currentStyle对象的Unset属性现在返回其初始值。... 25
6. style 对象的 Unset 属性值现在返回空字符串。... 26
第三节:IE8-IE9更新... 27
1. createElement方法中不允许使用尖括号<> 。... 27
2. IE9 标准模式不支持arguments.caller属性。... 28
3. 不再支持使用不带“.call”或“.bind”的函数指针调用方法。... 29
4. 不再连接内容属性和 DOM expando。... 30
5. JavaScript属性列举在IE9 中不同。... 31
6. 数学精确度在IE9 中不同。... 33
7. 间接“eval”函数调用的行为方式不同。... 34
8. IE9 处理含大型索引的数组项目的方式不一样。... 35
9. 重叠元素会被复制。... 36
10.DOM中会保留空格。... 37
11.部分DOM 事件已过时。... 38
第四节:IE10-IE11更新... 39
1. 已删除attachEvent,改用addEventListener。... 39
2. 已删除window.execScript,改用eval。... 39
3. 已删除window.doScroll,改用window.scrollLeft、window.scrollTop。... 39
4. 已删除document.all,改用document.getElementById。... 40
5. 已删除document.fileSize、img.fileSize,使用 XMLHttpRequest 可提取源。... 40
6. 已删除script.onreadystatechange 和 script.readyState,改用script.onload。... 40
7. 已删除document.selection,改用window.getSelection。... 40
8. 已删除document.createStyleSheet,改用document.createElement("style")。... 40
9. 已删除style.styleSheet,改用style.sheet。... 40
10. 已删除window.createPopup,改用 div 或 iframe(zIndex 值很高)。... 40
第四章:其他更新... 40
第一节:IE7-IE8更新... 40
1. 文件上载控件仅向服务器提交文件路径,而不提供完整路径。... 40
第二节:IE8-IE9更新... 41
1. 预设使用者代理(UA) 字串已变更.41
本文档内容涵盖:IE6升级到IE11过程中Javascript, DOM, HTML, CSS等方面的变化和调整。
参考依据MSDN:
1. Appendix 1: Internet Explorer 6 to Internet Explorer 9 BrowserChanges
http://technet.microsoft.com/en-us/library/gg699425.aspx
2. 附录 1:从 Internet Explorer 6 到 Internet Explorer 9 的浏览器更改
http://technet.microsoft.com/zh-cn/library/gg699425.aspx
3. Internet Explorer 9 Compatibility Cookbook
http://msdn.microsoft.com/zh-cn/library/ff986083(v=vs.85).aspx
4. 邊做邊學 IE9 相容性操作手冊
http://msdn.microsoft.com/zh-tw/ie/gg712396
5. Internet Explorer 11 开发人员指南
https://msdn.microsoft.com/zh-cn/library/ie/bg182636(v=vs.85).aspx
MSDN原文:Unclosed P elements are now automaticallyclosed when followed by TABLE, FORM, NOFRAMES, or NOSCRIPT elements.
所属分类 |
版本更新 |
HTML |
IE7-IE8 |
具体描述及示例:
如果缺少结束标记的 P 元素后跟 TABLE、FORM、NOFRAMES 或 NOSCRIPT 元素,会自动添加结束标记,即:TABLE、FORM、NOFRAMES 或 NOSCRIPT 元素不能再嵌套在段落元素P中了。
考虑如下代码:
<html>
<head>
<title>Simple PElement Closing Exampletitle>
<meta http-equiv="X-UA-Compatible" content="IE8"/>
head>
<body>
<p>This is thefirst paragraphp>
<p style="margin-left:30px">This is another paragraph.
<table border="1px" cellpadding="2px">
<tr><td>This is atable cell.td>tr>
table>
<p>This is athird paragraph.p>
body>
html>
在这个例子中,第二个P元素没有关闭。在IE6, IE7下,Table元素显示为第二个p元素的子元素。第二个p元素是窗口的左边界缩进30像素。因为该表是一个P元素的子元素,它也从窗口的左边界缩进。IE7下Html结构图如下:
然而,与IE8时,在默认模式下,TABLE元素对齐到左边缘。因为IE8会自动关闭显示表元素之前闭合的P元素,TABLE元素的子元素。IE8下Html结构图如下:
解决方案及正确写法:
请注意此特性, 在代码中规避风险。
MSDN原文:Malformed HTML is no longer supported, in favor of well-formed, validmarkup.
所属分类 |
版本更新 |
HTML |
IE7-IE8 |
具体描述及示例:
支持格式正确的有效标记,不再支持格式错误的HTML
Malformed HTML isno longer supported, in favor of well-formed, valid markup.
Parser error correction for malformed HTMLhas changed in IE8 Standards Mode. Pages depending on the way IE7 performserror correction may encounter issues as a result.
在IE8下可以看到如下效果图:
解决方案及正确写法:
HTML标记写法要严谨。
Ensure your markup is well-formed andvalid.
修改后,IE8下效果图如下:
所属分类 |
版本更新 |
HTML |
IE7-IE8 |
具体描述及示例:
如果不为Button设置type属性,旧版IE会将其自动设为button类型,而从IE8开始,为了遵守W3C标准,改变了原来的默认做法,现在默认此button为submit,而非button类型。
解决方案及正确写法:
需要为按钮设置type类型。
<button id="button1"type="button" style="width:150px;height:50px">按钮button>
IE6 IE7 IE8(Q) 对 COL 和 COLGROUP 元素的属性及部分 CSS 特性支持较好,而IE8(S), IE9不再支持 COL 及 COLGROUP 元素的部分属性及为其设定的 CSS 特性。
不支持的属性截图如下:
例如:colgroup和col的使用如下:
<TABLE id="china" >
<COLGROUP>
<COL align="left" width="80">COL>
<COL align="right" width="150" style=”display:none”>COL>
COLGROUP>
<THEAD>
<TR>
<TH align="left" name="Heading 1">日期TH>
<TH name="Heading 2">分数TH>
TR>
THEAD>
<TBODY>
<TR>
<TD name="Date">TD>
<TD name="Score">TD>
TR>
TBODY>
TABLE>
但IE9已经不支持页面中的align和style属性了,但还支持width属性。
因此,我们只好放弃在colgroup, col中设置样式,转而直接在td, th中设置。
至于仍然支持的width属性,建议也同样修改,以保持统一的风格, 到Html5中,将不再支持width属性了.
推荐资料:
HE1004: IE8(S) Firefox Chrome Safari 不再支持 COL 及 COLGROUP 元素的部分属性及为其设定的 CSS 特性http://www.w3help.org/zh-cn/causes/HE1004
HTML 5
http://www.w3school.com.cn/html5/tag_colgroup.asp
1. 表对象模式现在更加符合其他浏览器。
MSDN原文:Table Object ModelIs Now More Consistent with Other Browsers.
所属分类 |
版本更新 |
HTML |
IE8-IE9 |
具体描述及示例:
为了提高IE和其他浏览器之间的一致性,IE9的标准模式的表Table发生了以下变化:
•额外的THead和TFoot元素不会出现在table.tBodies集合中。这里所指的是table.tBodies属性,并不是在tBody里面放thead或者tfoot。如果有多余的thead或者tfoot,IE9模式下不会把它们计入在内,而在IE8模式下会把多余的thead或tfoot单独计入到一个tBody。
•Table的行集合有着不同的顺序。无论他们在文档内的顺序是什么,首先是THead内容, 其次是TBody内容,最后才是TFoot内容。
•调用rows统计将返回一个表内的所有层次的TR行数,包括直属TR行。也就是指把table里面的所有TR对象都计入在rows列表里面,而不论它是在根节点还是thead/tfoot/tbody里面
•使用getElementsByTagName和HtmlElement.children方法不返回注释节点。
To improve consistency between WindowsInternet Explorer and other browsers, the IE9 Standards mode includes thefollowing changes to the table object model:
•Extra thead and tfootelements do not appear in the tBodies collection.
•The rows collection hasa different ordering. First, it includes any rows in the thead element, thenall remaining rows that are not in the tfoot element, and then any rows in thetfoot element, regardless of their order in the document.
•A call for rows returnsall rows at all depths within the table, including direct row children of thetable.
•The getElementsByTagNameand HtmlElement.children methods do not return comment nodes.
如果不考虑这些变化在您的应用程序,应用程序可能会遇到次要的脚本错误,页面始终保持在加载中状态,或创建非预期内容等错误。
If you do not consider these changes inyour application, the application might encounter script errors that are minor,that keep pages from loading, or that create content that is not intended.
考虑如下代码:
function CheckTable() {
var table = document.getElementById("mytable");
var tBodyResult = "有" +table.tBodies.length + "个tBody\n\n";
var rows = table.rows;
var length = rows.length;
var rowResult = "";
for (var i = 0; i < length; i++) {
rowResult += "第" + (i+1) + "行: "+ rows[i].innerHTML + "\n";
}
alert(tBodyResult + rowResult);
}
Row1 |
Row2 |
Foot |
Head1 |
Head2 |