题目

  1. 项目运行期间可能会出现 js 脚本 加载失败的情况;

  2. 可全局捕获错误,重新加载;

重新加载

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        const maxRetry = 3; // 最大重试次数
        const retryInfo = {}; // 记录失败脚本信息
        const hostList = ['ricepudding.cn', 'static2.com', 'ricepudding2.cn'];
        window.addEventListener('error', (e) => {
            const tag = e.target;
            if (tag.tagName === 'SCRIPT' && !(e instanceof ErrorEvent)) {
                console.log('script 加载失败');

                const url = new URL(tag.src);
                if (!retryInfo[url.pathname]) {
                    retryInfo[url.pathname] = { times: 0 };
                }

                const info = retryInfo[url.pathname];
                url.host = hostList[info.times];
                // 需要使用 document.write 实现阻塞,js加载有可能是有依赖顺序的
                document.write(`<script scr="${url.toString()}">\<\/script>`);
                info.times++;
            }
        }, true); // error 事件没有冒泡,只能在捕获阶段使用
    </script>
</head>

<body>
    <script src="http://static.com/js/tools.js"></script>
</body>

</html>
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 题目
  2. 2. 重新加载