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 相关文章推荐
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
JavaScript Function函数类型介绍
Apr 08 Javascript
jquery滚动特效集锦
Jun 03 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
BootStrap 页签切换失效的解决方法
Aug 17 Javascript
关于react中组件通信的几种方式详解
Dec 10 Javascript
Vue单页及多页应用全局配置404页面实践记录
May 22 Javascript
JS常见错误(Error)及处理方案详解
Jul 02 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
JS如何使用剪贴板操作Clipboard API
May 17 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简单实现DES加密解密的方法
2016/07/12 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
Python生成pdf文件的方法
2014/08/04 Python
Python中property函数用法实例分析
2018/06/04 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
班级学习计划书
2014/04/27 职场文书
新闻发布会策划方案
2014/06/12 职场文书
综治工作心得体会
2014/09/11 职场文书
开学第一周值周总结
2015/07/16 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python