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 相关文章推荐
JavaScript 学习笔记(五)
Dec 31 Javascript
window.opener用法和用途实例介绍
Aug 19 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
vue项目中axios使用详解
Feb 07 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
Vue 组件封装 并使用 NPM 发布的教程
Sep 30 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
Jul 22 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
浅谈node.js中间件有哪些类型
Apr 29 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面向对象编程self和static的区别
2016/05/08 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
javascript Demo模态窗口
2009/12/06 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
详解Vue3中对VDOM的改进
2020/04/23 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
Python字符串匹配算法KMP实例
2015/07/18 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
生物科学专业个人求职信范文
2013/12/05 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
辞职信怎么写
2015/02/27 职场文书
面试复试通知单
2015/04/24 职场文书
会议主持词结束语
2015/07/03 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
MySQL 数据 data 基本操作
2022/05/04 MySQL