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基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
jQuery.holdReady()方法用法实例
Dec 27 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
Vue 组件传值几种常用方法【总结】
May 28 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
浅谈Vue SSR中的Bundle的具有使用
Nov 21 Javascript
在vue中使用console.log无效的解决
Aug 09 Javascript
详解TS数字分隔符和更严格的类属性检查
May 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数据类型的总结分析
2013/06/13 PHP
php实现天干地支计算器示例
2014/03/14 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
php中错误处理操作实例分析
2019/08/23 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
python测试mysql写入性能完整实例
2018/01/18 Python
pandas数值计算与排序方法
2018/04/12 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python处理document文档保留原样式
2019/09/23 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
纬创Java面试题笔试题
2014/10/02 面试题
大三在校生电子商务求职信
2013/10/29 职场文书
大学生村官承诺书
2014/03/28 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
2014年财政工作总结
2014/12/10 职场文书
化验室安全管理制度
2015/08/06 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
Python制作动态字符画的源码
2021/08/04 Python