IE6IE9兼容性问题列表及解决办法.docx
《IE6IE9兼容性问题列表及解决办法.docx》由会员分享,可在线阅读,更多相关《IE6IE9兼容性问题列表及解决办法.docx(48页珍藏版)》请在冰豆网上搜索。
IE6IE9兼容性问题列表及解决办法
IE6升级到IE9兼容性问题和操作手册
2012/4/6BobLiu
目录
概述2
第一章:
HTML3
第一节:
IE7-IE8更新3
1.如果缺少结束标记的P元素后跟TABLE、FORM、NOFRAMES或NOSCRIPT元素,会自动添加结束标记。
3
2.支持格式正确的有效标记,不再支持格式错误的HTML。
4
第二节:
IE8-IE9更新5
1.表对象模式现在更加符合其他浏览器。
5
2.文本布局使用自然度量而不是图形设备接口(GDI)度量。
7
第二章:
CSS9
第一节:
IE6-IE7更新9
1.方框模型溢出内容现与方框相交,不再让方框自动增长适应内容。
9
2.不再支持某些CSS筛选器(如*HTML、_underscore和/**/注释)。
11
3.已解决SELECT元素不能被div覆盖的问题。
14
第二节:
IE7-IE8更新14
1.不再支持CSS表达式,改为支持增强的CSS或DHTML逻辑。
14
2.currentStyle对象的Unset属性现在返回其初始值。
15
3.style对象的Unset属性值现在返回空字符串。
16
第三节:
IE8-IE9更新17
1.泰语和东亚语文本和字体大小的显示可能小于其他字样。
17
2.某些行为连接方法在XML模式中不可用。
18
第三章:
JavascriptandDOM19
第一节:
IE6-IE7更新19
1.不再允许用于绕过window.close提示的window.opener技巧。
19
2.从脚本创建的模式或无模式对话框看起来似乎稍微变大。
20
第二节:
IE7-IE8更新20
1.支持“class”语法,不再支持“className”属性语法。
20
2.属性集合不再包含InternetExplorer可识别的所有可能属性。
21
3.属性排序已更改,影响了属性集、innerHTML和outerHTML。
22
4.GetElementById区分大小写,且不再搜索名称属性。
23
第三节:
IE8-IE9更新24
1.createElement方法中不允许使用尖括号<>。
24
2.IE9标准模式不支持arguments.caller属性。
24
3.不再支持使用不带“.call”或“.bind”的函数指针调用方法。
25
4.不再连接内容属性和DOMexpando。
27
5.JavaScript属性列举在IE9中不同。
28
6.数学精确度在IE9中不同。
29
7.间接“eval”函数调用的行为方式不同。
30
8.IE9处理含大型索引的数组项目的方式不一样。
31
9.重叠元素会被复制。
32
10.DOM中会保留空格。
33
11.部分DOM事件已过时。
35
第四章:
其他更新36
第一节:
IE7-IE8更新36
1.文件上载控件仅向服务器提交文件路径,而不提供完整路径。
36
第二节:
IE8-IE9更新37
1.预设使用者代理(UA)字串已变更.37
概述
本文档内容涵盖:
IE6升级到IE9过程中Javascript,DOM,HTML,CSS等方面的变化和调整。
参考依据MSDN:
1.Appendix1:
InternetExplorer6toInternetExplorer9BrowserChanges
2.附录1:
从InternetExplorer6到InternetExplorer9的浏览器更改
3.InternetExplorer9CompatibilityCookbook
4.邊做邊學IE9相容性操作手冊
第一章:
HTML
第一节:
IE7-IE8更新
1.如果缺少结束标记的P元素后跟TABLE、FORM、NOFRAMES或NOSCRIPT元素,会自动添加结束标记。
MSDN原文:
UnclosedPelementsarenowautomaticallyclosedwhenfollowedbyTABLE,FORM,NOFRAMES,orNOSCRIPTelements.
所属分类
版本更新
HTML
IE7-IE8
具体描述及示例:
如果缺少结束标记的P元素后跟TABLE、FORM、NOFRAMES或NOSCRIPT元素,会自动添加结束标记,即:
TABLE、FORM、NOFRAMES或NOSCRIPT元素不能再嵌套在段落元素P中了。
考虑如下代码:
SimplePElementClosingExample
Thisisthefirstparagraph
30px">Thisisanotherparagraph.
--Pnotclosed-->
Thisisatablecell. |
Thisisathirdparagraph.
在这个例子中,第二个P元素没有关闭。
在IE6,IE7下,Table元素显示为第二个p元素的子元素。
第二个p元素是窗口的左边界缩进30像素。
因为该表是一个P元素的子元素,它也从窗口的左边界缩进。
IE7下Html结构图如下:
然而,与IE8时,在默认模式下,TABLE元素对齐到左边缘。
因为IE8会自动关闭显示表元素之前闭合的P元素,TABLE元素的子元素。
IE8下Html结构图如下:
解决方案及正确写法:
请注意此特性,在代码中规避风险。
2.支持格式正确的有效标记,不再支持格式错误的HTML。
MSDN原文:
MalformedHTMLisnolongersupported,infavorofwell-formed,validmarkup.
所属分类
版本更新
HTML
IE7-IE8
具体描述及示例:
支持格式正确的有效标记,不再支持格式错误的HTML
MalformedHTMLisnolongersupported,infavorofwell-formed,validmarkup.
ParsererrorcorrectionformalformedHTMLhaschangedinIE8StandardsMode.PagesdependingonthewayIE7performserrorcorrectionmayencounterissuesasaresult.
- 1.1
—多了一个标记,willCloses1.1inIE8,butnotIE7-->
- 1.1.2
在IE8下可以看到如下效果图:
解决方案及正确写法:
HTML标记写法要严谨。
Ensureyourmarkupiswell-formedandvalid.
修改后,IE8下效果图如下:
第二节:
IE8-IE9更新
1.表对象模式现在更加符合其他浏览器。
MSDN原文:
TableObjectModelIsNowMoreConsistentwithOtherBrowsers.
所属分类
版本更新
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方法不返回注释节点。
ToimproveconsistencybetweenWindowsInternetExplorerandotherbrowsers,theIE9Standardsmodeincludesthefollowingchangestothetableobjectmodel:
•ExtratheadandtfootelementsdonotappearinthetBodiescollection.
•Therowscollectionhasadifferentordering.First,itincludesanyrowsinthetheadelement,thenallremainingrowsthatarenotinthetfootelement,andthenanyrowsinthetfootelement,regardlessoftheirorderinthedocument.
•Acallforrowsreturnsallrowsatalldepthswithinthetable,includingdirectrowchildrenofthetable.
•ThegetElementsByTagNameandHtmlElement.childrenmethodsdonotreturncommentnodes.
如果不考虑这些变化在您的应用程序,应用程序可能会遇到次要的脚本错误,页面始终保持在加载中状态,或创建非预期内容等错误。
Ifyoudonotconsiderthesechangesinyourapplication,theapplicationmightencounterscripterrorsthatareminor,thatkeeppagesfromloading,orthatcreatecontentthatisnotintended.
考虑如下代码:
//www.w3.org/1999/xhtml">
TableTest
functionCheckTable(){
vartable=document.getElementById("mytable");
vartBodyResult="有"+table.tBodies.length+"个tBody\n\n";
varrows=table.rows;
varlength=rows.length;
varrowResult="";
for(vari=0;irowResult+="第"+(i+1)+"行:
"+rows[i].innerHTML+"\n";
}
alert(tBodyResult+rowResult);
}
Row1 |
Row2 |
Foot |
Head1 |
Head2 |
ClickMe