IE浏览器因不支持includes不支持七牛JavaScript SDK云解决方案

2022-05-19 17:20 栏目:技术开发 查看(4623)

在几个月前我们在微构网络官网上面发布过一篇名为《基于七牛云JavaScript SDK一行代码实现大文件分片断点续传》的文章,这篇文章在网上应该至少被数百人次查阅过,也接到好几个人进一步的问题咨询。其中有一个问题是一个共性问题,都认为这里面的代码有问题,在IE浏览器上面执行不了。我们一般写博客文章分享的时候,都是仅提供核心代码,而不是完整的项目代码;主要是两个原因:1、在一篇短文中贴出所有代码,不能突出核心问题所在;2、我们是比较反感完完全全的伸手党的。

如果仅仅按照文章中的核心代码,直接去跑demo,那么在ie浏览器下确实会出现上传无效,打开控制台就可以看到报错信息。

QQ截图20220519165238

原因在于在七牛云JavaScript SDK qiniu.min.js中使用了includes()方法,这个方法用于判断字符串是否包含指定的子字符串, 如果找到匹配的字符串则返回 true,否则返回 false。浏览器的支持情况如下:

QQ截图20220519170817

很显然在IE浏览器上默认是不被支持的,那么应该怎么办呢?

解决办法一:使用其他方法属性代替includes()

这种方法适合自己手写的局部代码,如果是使用SDK等现成的,我们不太建议修改其核心源代码。

解决方法二:使得IE浏览器支持includes,也就是另外些一个这个方法

以下自己构建includes方法的代码参考网络其他资料而来,其他IE不支持的方法也可以参考如下代码实现。

if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, "includes", {
     value: function(valueToFind, fromIndex) {
        if (this == null) {
            throw new TypeError('"this" is null or not defined');
        }
        var o = Object(this);
        var len = o.length >>> 0;
        if (len === 0) {
           return false
        }
        var n = fromIndex | 0;
        var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
        function sameValueZero(x, y) {
           return (x === y || (typeof x === "number" && typeof y === "number" && isNaN(x) && isNaN(y)))
        }
        while (k < len) {
          if (sameValueZero(o[k], valueToFind)) {
             return true
          }
          k++
        }
        return false
     }
  })
}

当然,这种方法也适用于其他js库使用了includes()方法的场景,也是一样的道理,就是自己“外挂”构造实现includes的方法。

这也说明,我们在选择技术实现方案的时候,一定要根据我们开发项目的实际场景选择。而不是一味地追求技术的新颖,而不管三七二十一一顿乱上,这样或许会留下填不完的坑。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:IE浏览器因不支持includes不支持七牛JavaScript SDK云解决方案 - 微构网络
分享: