新版的react,v15.0已经不支持IE8了,如果项目需求需要兼容到IE8,那我们就要用稍微低点的版本了,v0.14版本的还兼容IE8,但是我们的react脚本编译后是ES5的,在IE8上还需要使用es5的兼容插件es5-shim
和es5-sham
。
先说说我遇到的坑。以前写HTML5,为了兼容引入了html5-shiv。今天练习react,看IE8的兼容情况的时候,发现不起作用。一边google一边问,react兼容IE8是要使用ES5shim的。于是我在页面中引入了es5-shim.js,发现IE8还是报错,不支持。gogole后,还需要es5-sham.js,我又在前面加入了es5-sham.js。还是不兼容!懵逼了。在npm的es5-shim包主页看到说明描述。es5-shim在es5-sham前面引入的。于是我换了个位置。
<script src="node_modules/es5-shim/es5-shim.min.js"></script>
<script src="node_modules/es5-shim/es5-sham.min.js"></script>
这样就OK了。IE8兼容了。
在搜索的过程中看到搜索‘es5-shim和es5-sham的区别’的特别多。我也好奇。但好像没有明确答案。不过看了es5-shim的npm包页面的文档描述后,大概知道了。
es5-shim主要是对ES3的一些方法做扩展,比如String.trim,Array.forEach,Array.map
等。
es5-sham则是对ES3做Object的一些ES5的属性方法扩展,如‘Object.create,Object.getPrototypeOf,Object.freeze’等等。
两个脚本的代码没细看,我只想说,为毛要分得这么细?就不能写到一个文件里吗?反正单独的一个也不能独活。