IE8兼容那些事(包括react)
来源:互联网 发布:matlab 三维数组 画图 编辑:程序博客网 时间:2024/06/04 19:25
CSS
- IE浏览器hack
@media \0screen {} //IE8的hack
其他hack:http://www.cnblogs.com/PeunZhang/archive/2012/04/09/2437563.html
- IE8实现背景半透明,内容不透明
高版本浏览器用rgba可完美解决,但IE8不支持rgba,需要利用滤镜解决。另外IE9下rgba和filter都生效,会造成双倍透明效果,也需要注意。提供两个解决方案:
//现代浏览器 background: rgba(0, 0, 0, .7); //第一种 利用滤镜的渐变,但对于白色背景无效,不需要加IE8 hack; filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7F000000, endcolorstr=#7F000000);//第二种 position必须为static子元素为relative,子元素才不会透明;且父元素不能用z-index,要用的话再套一层“爷爷”元素,给爷爷设置z-index;需要加IE8 hack; @media \0screen { background: #000; filter: Alpha(opacity=70); }
JS
- IE8下event对象
IE8的event对象是挂载在window对象下的,阻止冒泡等,也有不同的实现。以阻止冒泡为例:
function stopPropagation(e){
var e = e || window.event; //IE8的event对象挂载在window下,函数参数未自带
(e.stopPropagation) ? e.stopPropagation(): e.cancelBubble = true; //阻止冒泡
}
其他类似
阻止冒泡:(e.stopPropagation) ? e.stopPropagation(): e.cancelBubble = true;
阻止默认事件:(e.preventDefault) ? e.preventDefault(): e.returnValue = false;
获取点击元素:var target = e.target || e.srcElement;
- IE 8下小心使用console.log
在IE8中要想使用它调试代码必须要先开启F12,如果不开启F12,在浏览器的下方就会显示报错。那是因为IE8会将console.log()默认处理为错误逻辑,但是在F12下处理为控制台输出。比较有意思的是,但我们将F12关闭,刷新页面,IE8 仍然将console.log()处理为控制台输出,即打开过一次F12,就会一直识别console.log()。因此我们常常会在调试后忘记删除console.log()语句。
怎样让报错重现:开启一次F12后,会识别console.log()。我们需要清空浏览器缓存,再重启浏览器,不打开F12,就会重现了。我们应该做的是养成好的编程习惯,不要滥用console.log(),调试后记得注释掉或删掉调试代码。如有必要,可引入相应shim。
- IE8变量类型判断
Object.prototype.toString.call(null | undefined) === '[object Object]',而chrome为[object Null]、[object Undefined]
- IE8的application/json兼容问题
IE8用iframe处理上传文件时(如ant design),如果返回的content-type:application/json,会被当成文件,触发下载;另外不用iframe时,虽然不会触发下载,但是也会被当成文件走缓存策略(如304),使得接口数据不变。
1、触发下载的问题,需要后端对返回的content-type修改成 text/plain或 text/html。但也要注意副作用,较稳妥的做法是后端判断agent是否为IE8 IE9,单独设置content-type。
2、接口数据被缓存的问题,如果按1的方式修改了content-type应该就不会出问题了(没亲自试过)。另一种思路是每个请求都加个时间戳参数。
https://github.com/react-component/upload#ie89-note
SHIM
注意:所有shim已加入公用cdn,具体请访问前端静态资源CDN列表,有较详细备注。所有shim可按如下方式引用
<!--[if lt IE 9]>
<script src="//st01.chrstatic.com/themes/chr-cdn/html5shiv/v3.7.3/html5shiv.min.js"></script>
<![endif]-->
- html5shiv
让低版本浏览器支持html5标签,详见:https://github.com/aFarkas/html5shiv
- Respond
让低版本浏览器支持@media响应式,详见:https://github.com/scottjehl/Respond
- es5-shim
让低版本浏览器支持ES5方法,详见:https://github.com/es-shims/es5-shim
待补充:fetch、json、console等
LIBS
- jquery
v1.12.x支持IE6/7,v1.13.x支持IE8
- react
v0.14.x支持IE8
https://github.com/xcatliu/react-ie8
- react-router
v2.x支持IE8
- ant design
v1.x 支持IE8
- swiper
v2.x支持IE8
react+webpack兼容IE8的配置
首先react要v0.14.x以下,以下代码均以react v0.14.8+webpack2为基础,其他版本请自行调整。
- html要做好es5的兼容准备,引入各种shim,做好内核切换等,参考HTML初始化模板——赵兰得隆
- webpack配置react、ES5转译,以及postcss等loader(最关键也是最麻烦的)
//开发环境配置,不压缩,需要es3ify-loader处理IE8保留字module: { rules: [{ test: /\.(js|jsx)$/, include: /src/, use: [ //es3ify-loader必须 "es3ify-loader", { loader: 'babel-loader', options: { presets: ['es2015', 'react'] } } ] }, { test: /\.(css|scss)$/, include: /src/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: ["css-loader", { loader: "postcss-loader", options: { plugins: function() { return [ require('autoprefixer')({ browers: ['ie >=8', 'last 5 versions'] }) //自动加低版本前缀 ]; } } }, "sass-loader"] }) }]}//生产环境,需要压缩,不需要es3ify-loader,但需要配置UglifyJsPlugin插件plugins: [ new webpack.optimize.UglifyJsPlugin({ mangle: { screw_ie8: false, //mangle 通过设置except数组来防止指定变量被改变 (防止指定变量被混淆) except: ['$super', '$', 'exports', 'require'] }, output: { screw_ie8: false, //必须 comments: false //是否有注释 }, compress: { screw_ie8: false, //必须 warnings: false //是否显示警告 } })],module: { rules: [{ test: /\.(js|jsx)$/, include: /src/, use: [{ loader: 'babel-loader', options: { presets: ['es2015', 'react'] } }] }, { test: /\.(css|scss)$/, include: /src/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: [{ loader: "css-loader", options: { minimize: true //压缩css } }, { loader: "postcss-loader", options: { plugins: function() { return [ require('autoprefixer')({ browers: ['ie >=8', 'last 5 versions'] }) ]; } } }, "sass-loader"] }) }]}
- IE8兼容那些事(包括react)
- react兼容IE8
- react如何兼容IE8
- redux+react+webpack+热加载+兼容IE8(持续更新)
- redux+react+webpack+热加载+兼容IE8(持续更新)
- 最完整的React+Redux+router兼容ie8 修改!!!!
- 最完整的React+Redux+router兼容ie8 修改!!!!
- React+router+redux兼容ie8下的页面效果
- 【兼容】浏览器兼容那些事
- IE8兼容 (ASP.NET)
- jQuery弹幕 (兼容IE8)
- React Native那些事
- React-Native那些事
- 对话框绝对居中(兼容IE8)
- PC端兼容那些事
- reactjs react-router 那些事
- 兼容IE8样式
- css兼容IE8
- shell编程
- 几种常用内存管理底层介绍
- 并发编程(12)-生产者消费者
- javascript中的双感叹号语法(!!)
- 习题6.1(1)
- IE8兼容那些事(包括react)
- 漫谈兼容内核之二十二:Windows线程的调度和运行
- HDU1518-Square
- 奇怪的Java题:为什么1000 == 1000返回为False,而100 == 100会返回为True?
- mysql排序同值排名一致
- virtuoso 安装与使用
- POJ 1017
- Turtlebot学习指导第二篇_安装Turtlebot软件包,配置主从机网络
- SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition