react umi.js echars.js ie9兼容性问题


前言

最近有个项目需要兼容ie9,并且使用了antd和echars,经过两天的努力终于成功了。

一、umi配置

官方文档给出了一种解决方案:
在这里插入图片描述
但是我们在.umirc.ts文件中配置targets: { ie: 9 }发现没有生效,看了下报错,依然有不兼容的错误提示。

二、引入插件

1.引入库

代码如下(示例):
在document.ejs文件里引入一下js文件:

<script src="https://npmcdn.com/es5-shim@4.5.8/es5-shim.min.js"></script>

<script src="https://npmcdn.com/es5-shim@4.5.8/es5-sham.min.js"></script>

<script src="https://as.alipayobjects.com/g/component/??console-polyfill/0.2.2/index.js,html5shiv/3.7.2/html5shiv.min.js,media-match/2.0.2/media.match.min.js"></script>

这样打包后我们的代码已经可以在ie9下正常运行了。但是我们打开有echars的页面依然白屏,echars不兼容。

2.兼容echars

我发现官网中有兼容版本:
在这里插入图片描述
翻到最下面
在这里插入图片描述
选择好我们需要用的的图形后,在下方勾选兼容ie8的按钮,下载
在这里插入图片描述

在document.ejs文件里引入一下刚刚下载的echars.js文件:
**

注意:一定要在body里面引入而不是在head里面

**
在head里面引入,在ie9环境下页面会报错显示echars未定义,我们在body里面引入就可以了,echars正常显示。

但是在开发过程中发现IE9下如果页面存在多个echars图表有时会报错:

“requestAnimationFrame” 未定义  或者 “cancelAnimationFrame ”未定义

这时我们在项目中添加以下代码:

(function () {
  var lastTime = 0;
  var vendors = ['ms', 'moz', 'webkit', 'o'];
  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
      window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
      window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
          window[vendors[x] + 'CancelRequestAnimationFrame'];
  }

  if (!window.requestAnimationFrame) {
      window.requestAnimationFrame = function (callback, element) {
          var currTime = new Date().getTime();
          var timeToCall = Math.max(0, 16 - (currTime - lastTime));
          var id = window.setTimeout(function () { callback(currTime + timeToCall); },
              timeToCall);
          lastTime = currTime + timeToCall;
          return id;
      };
  }

  if (!window.cancelAnimationFrame) {
      window.cancelAnimationFrame = function (id) {
          clearTimeout(id);
      };
  }
}());

会发现报错没有了,可以正常显示了


总结

到这一步js的兼容性问题就解决了,但是我用了antd,发现很多样式已经不兼容了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值