IE9+已经不对document.createElement向下兼容的解决方法


Posted in Javascript onSeptember 14, 2015

今天发现某网站上,IE9和chrome中页面的功能居然有差异,于是在IE9下打开console,发现一堆js报错,用fiddler跟踪了一下,原来代码里有一句是这样的:

if(ie){
  var iframe = document.createElement('<iframe src="https://3water.com"></iframe>');
}

是的,问题就出在这里:DOM Exception: INVALID_CHARACTER_ERR (5)
因为在IE9里面,一些方法已经向w3c标准靠拢,和firefox、chrome浏览器等都保持了一致,包括这里的document.createElement方法。
因此,这里的代码需要改成:

if(ie && version < 9) {
  var iframe = document.createElement('<iframe src="https://3water.com"></iframe>');
} else {
  var iframe = document.createElement('iframe');
  iframe.setAttribute('src','https://3water.com');
}

不过,如果页面上加上了这个meta标签的话,能将IE9的文档模式强制降级到IE7:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">

这样可以绕开这个BUG,不过我的建议是,如果页面上没有什么特殊的不能处理的,不要加这样的强制,会导致一些正常模式下不可控的现象。

在这里,我也顺便列几条我印象中的IE各个版本的差异性:

1、IE6
a、不支持png半透明图片,只能用filter实现
b、不支持css的max-width、max-height、min-width、min-height
其他不用说,一团糟,不过项目中还是得去兼容!

2、IE7
a、解决了png半透明图片的支持问题
b、解决了css的max-width、max-height、min-width、min-height支持
c、解决了css float导致的bug
d、增强了css选择器,比如,div节点也支持:hover伪类了
虽然解决了IE6的很多问题,不过IE7始终是一个中间产物,很多时候会出现让人摸不着头脑的样式问题,一般情况下,zoom:1是万能的

3、IE8
a、完全支持css2.1的选择器,向w3c看齐,逐步标准化
b、去掉了css中expression的支持,而增加-ms-的私有前缀
c、js方面,支持localStorage了
d、由于版本多,所以搞出了一个UA兼容模式:X-UA-Compatible

4、IE9
a、css3支持(部分)
b、html5支持(部分)
但是Javascript引擎换掉了,换成了chakra,性能很赞,同时也反映出:部分DOM操作已经不再向下兼容了。在这个时候,IE9已经实现w3c标准化了。

5、IE10
a、css3和html5的强支持
b、更多的-ms-私有属性(私有属性多了以后,会不会又走偏了?当然,这是chrome和firefox带头走偏的。。。各种私有属性!!!)

总之,咱们做前端的,就得跟着变化走,然后去适应这些变化。

Javascript 相关文章推荐
jquery解析xml字符串简单示例
Apr 11 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
JavaScript数组实现数据结构中的队列与堆栈
May 26 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
浅谈Vue父子组件和非父子组件传值问题
Aug 22 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 Javascript
React 组件渲染和更新的实现代码示例
Feb 21 Javascript
详解vue中多个有顺序要求的异步操作处理
Oct 29 Javascript
微信小程序实现购物车小功能
Dec 30 Javascript
JS动态添加iframe的代码
Sep 14 #Javascript
javascript实现在指定元素中垂直水平居中
Sep 13 #Javascript
window.onload使用指南
Sep 13 #Javascript
JS+CSS简单树形菜单实现方法
Sep 12 #Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 #Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 #Javascript
JS+CSS实现的简单折叠展开多级菜单效果
Sep 12 #Javascript
You might like
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
Python插件机制实现详解
2020/05/04 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
幼儿教师培训感言
2014/03/08 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
发布会邀请函
2015/01/31 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python