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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
javascript数组的扩展实现代码集合
Jun 01 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
Feb 02 Javascript
extJS中常用的4种Ajax异步提交方式
Mar 07 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
May 03 Javascript
JavaScript设计模式之装饰者模式实例详解
Jan 17 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 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依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
php简单实现快速排序的方法
2015/04/04 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
js同源策略详解
2015/05/21 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python生成词云的实现代码
2020/01/14 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Python发送邮件实现基础解析
2020/08/14 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
保送生自荐信范文
2013/10/06 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书