IE9下样式兼容性问题

2021-12-10  本文已影响0人  vioi

-1.IE9下antd按需引入会导致部分样式丢失,原因是IE9下样式表( @import <link /> <style />)最多可以有31个,多于这个数目的样式表会被忽略。antd按需引入是通过js动态将每个引入的antd组件的样式插入到<style></style>标签内容里,每个antd组件样式都会有一个<style>。如果项目中用到多个组件导致样式表超过31个,就会导致超出的antd组件样式丢失,所以就不能按需引入antd样式。

['import', { libraryName: 'antd', style:'css' }], //style值为true会按需引入,这里改为css。

注:antd样式全部引入后,要对样式文件进行分割多份。IE9下加载css文件的前提是该css文件内的样式规则不超过4095个,超过4095就不会加载,所以要在webpack plugins那里配置如下插件,这样打包时会将超过4095个样式规则进行分割成多份css文件。

plugins:[
...,
new CSSSplitWebpackPlugin({ size: 4000, filename:'static/css/[name]-[part].[ext]'}),
]

0.IE9下有bind方法,依然会报错:对象不支持bind属性和方法(打开开发者工具的情况下页面会报错,不打开页面就没问题),查看原因是1.16.2版本的react-intl-universal依赖导致的,报错代码路径:/node_modules/react-intl-universal/lib/index.js

错误位置:warningHandler: console.warn.bind(console)

解决方案:升级依赖版本到2.2.5(不要用最新版本2.4.8,升级到最新版本后,它的依赖intl-messageformat@7.x版本会报新的语法错误)

最新发现:升级到2.2.5版本后打开日志后可能会报apply不是方法或者属性的问题,原因是找不到对应语言包导致该依赖会打印警告日志,导致IE9执行console.warn.apply会报错导致。

1.display : flex 不可用,可用dispaly : table代替,子元素display : table-cel,配合vertical-align居中

2.transfrom不可用,需要加前缀:-ms-

3.上传接口响应类型content-type应为text/html,如果为appliation/json会提示是否下载保存响应的数据。这里要后端根据请求头字段User-Agent判断浏览器类型返回content-type,而前端则要判断返回的数据是否为字符串,如果是,要JSON.parse

  1. antd upload组件上传失败后叶密爱你依然会展示上传的文件,解决:fileList受控,失败时this.setState({fileList:[]})

5.输入框后缀出现叉号,解决方案:input::-ms-clear { display: none; }(仿真模式下不起作用,真实环境下才会有效)

7.绑定了message事件,即使嵌入的iframe没有执行postMessage,也会一直触发message事件。

  1. antd Dropdown组件设置了getPopupContainer后,会导致Menu菜单项无法点击
上一篇 下一篇

猜你喜欢

热点阅读