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 18 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
深入理解Javascript里的依赖注入
Mar 19 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
Aug 27 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 Javascript
详解node登录接口之密码错误限制次数(含代码)
Oct 25 Javascript
vue element实现表格合并行数据
Nov 30 Vue.js
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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js导出txt示例代码
2014/01/14 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
vue-axios使用详解
2017/05/10 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
Python调用C++程序的方法详解
2017/01/24 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Django choices下拉列表绑定实例
2020/03/13 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
介绍一下Python中webbrowser的用法
2013/05/07 面试题
我的老师教学反思
2014/05/01 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
2016年教师新年寄语
2015/08/18 职场文书
2019年思想汇报
2019/06/20 职场文书
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL