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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
js select常用操作控制代码
Mar 16 Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
JS实现加载和读取XML文件的方法详解
Apr 24 Javascript
webpack构建react多页面应用详解
Sep 15 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
微信小程序中target和currentTarget的区别小结
Nov 06 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浏览历史记录的方法
2015/03/10 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
js实现星星打分效果
2020/07/05 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python 函数基础知识汇总
2018/03/09 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
使用python接入微信聊天机器人
2020/03/31 Python
python实现控制台输出彩色字体
2020/04/05 Python
Opencv求取连通区域重心实例
2020/06/04 Python
python如何变换环境
2020/07/21 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
办公室岗位职责
2014/02/12 职场文书
黄石寨导游词
2015/02/05 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
python实现简单的井字棋
2021/05/26 Python
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL