Polyfill 可以为旧浏览器提供和标准 API 一样的功能。比如你想要 IE 浏览器实现 Promise 和 fetch 功能,你需要手动引入 es6-promisewhatwg-fetch。而通过 Polyfill.io,你只需要引入一个 JS 文件。

解决方法:

(1)非node项目(了解polyfill):

可引入<script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script><script type="text/javascript" src = "https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>

(2)node项目:

正常来讲 有babel的项目是可以使用Promise的,但是如果webpack异步加载时,要求原生支持Promise,webpack生成的new Promise相关代码,超出babel的transform-runtime的控制范围,只有导出全局Promise才能解决

抛出问题:

1、引入babel-polyfill导出全局Promise(这种方法不带会导出Promise,还会导出其他大量全局对象,可能会有冲突,且文件体积比较大)

2、在js文件开头添加window.Promise = Promise; 语句来导出全局Promise

<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>

Polyfill.io 通过分析请求头信息中的 UserAgent 实现自动加载浏览器所需的 polyfills。
Polyfill.io 有一份默认功能列表,包括了最常见的 polyfills:document.querySelectorElement.classList、ES5 新增的 Array 方法、Date.now、ES6 中的 Object.assignPromise 等。

异步加载

提供callback参数,当polyfill加载成功之后执行对应函数

<!-- 异步加载 -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?callback=main" async defer></script>
实例运用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?callback=main" async defer></script>
    <script>
        function main(){
            var node=document.createElement("script");
            node.src="index.js";
            document.body.appendChild(node);
        }
    </script>
</head>
<body>
    
</body>
</html>
polyfill在实际运用过程中,是个不错的解决方案