JS加载资源失败的解决办法

news2024/12/23 17:05:20

JS加载资源失败的解决办法

原文地址

JS加载失败导致问题

  • JS 也有可能加载失败,导致页面样式错乱,甚至白屏无法使用。
  • 这对用户体验是非常不利的,尤其是对于单页应用,如果 JS 加载不出来,用户就无法继续浏览页面了。

比如, 网络不稳定,服务器出错,跨域问题、或者资源本身有问题,导致出现了资源加载失败。就会造成后面需要使用的地方出现undefined

在这里插入图片描述

在这里插入图片描述

解决办法

通过监听script标签中资源加载出错,从而执行一些自己想要的操作

  • 注意,下面的方法必须写到所有script标签之前,才可以监听到资源加载出错
<script>
	window.addEventListener('error', (event) => {
		console.log(event)
		// 拿到触发错误的标签
		const tag = event.target;
		// 便签的名称必须是 'SCRIPT' 与 event 错误的类型不能是 ErrorEvent
		if (tag.tagName === 'SCRIPT' && !(event instanceof ErrorEvent)) {
			console.log(tag.src, 'script 加载错误');
		}
	}, true)
</script>

<!-- 出错的标签 -->
<script src="https://cdnjs.cloudflare1.com/ajax/libs/echarts/5.4.3/echarts.min.js"></script>

在这里插入图片描述

重试

codepen地址

  • 重试的次数根据项目进行自定义,达到指定的重试次数之后,执行其他操作即可
<script>
	// 重试的信息
	const retryInfo = {},
		maxRetryNum = 3
	window.addEventListener('error', (event) => {
		console.log(event)
		// 拿到触发错误的标签
		const tag = event.target;
		// 便签的名称必须是 'SCRIPT' 与 event 错误的类型不能是 ErrorEvent
		if (tag.tagName === 'SCRIPT' && !(event instanceof ErrorEvent)) {
			const url = tag.src;
			console.log(url, 'script 加载错误');
			if (!retryInfo[url]) {
				retryInfo[url] = {
					retryTime: 0
				}
			}
			// 如果重试的次数小于 最大的重试次数,才可以继续重试
			if (retryInfo[url].retryTime < maxRetryNum) {
				// 重试就要生成一个新的元素
				const script = document.createElement('script')
				// 然后将新的 url 添加到新的 script 的 src 里
				script.src = url.toString()
				// 将新的 script 加入到失败的 script 之前
				document.body.insertBefore(script, tag)
				retryInfo[url].retryTime++
			}
			else if(retryInfo[url].retryTime === maxRetryNum) {
				alert("重试次数到了")
			}
		}
	}, true)
</script>

<!-- 出错的标签 -->
<script src="https://cdnjs.cloudflare1.com/ajax/libs/echarts/5.4.3/echarts.min.js"></script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算迎来中场战役,MaaS或将成为弯道超车“新赛点”

科技云报道原创。 没有人能预见未来&#xff0c;但我们可以因循常识&#xff0c;去捕捉技术创新演进的节奏韵脚。 2023年最火的风口莫过于大模型。 2022年底&#xff0c;由美国初创企业OpenAI开发的聊天应用ChatGPT引爆市场&#xff0c;生成式AI成为科技市场热点&#xff0c…

(十六十七)时序数据库是怎么存储用户名和密码的从InfluxDB OSS迁移数据

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 16 章 时序数据库是怎么存储用户名和密码的 1、InfluxDB内部自带了一个用Go语言写的BlotDB&#xff0c;Blo…

大数据处理架构详解:Lambda架构、Kappa架构、流批一体、Dataflow模型、实时数仓

前言 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据理论体系 姊妹篇 《分布式数据模型详解&#xff1a;OldSQL &…

LDR6028DRP五V充电芯片OTG传数据充电高端方案

随着科学的进步&#xff0c;生产力的进步&#xff0c;时代的进步&#xff0c;电子产品的更新迭代&#xff0c;手机上面的接口越来越来少&#xff0c;甚至到后面手机没有任何接口。现在的手机只剩Type-c&#xff0c;那手机又要充电又要进行数据传输&#xff0c;那怎么办呢。那么…

Vue 常用指令 v-for 列表循环

v-for&#xff1a;根据数据生成列表结构&#xff0c;并且是响应式的&#xff0c;可以十分便捷的操作列表结构了。 至于是什么样的列表&#xff0c;就看你指令使用的位置了&#xff0c;列表的生成依赖于数据&#xff0c;所以先去定义数据。 它结合的类型挺多的&#xff0c;数组…

js实现框选截屏功能

实现的思路大概就是&#xff0c;先将dom转化为canvas画布&#xff0c;再对canvas进行裁切&#xff0c;然后通过canvas api生成图片&#xff0c;这里用到了一个库html2canvas 效果如图&#xff1a; 首先实现框选效果&#xff1a; const mousedownEvent (e) > {moveX 0;mo…

Java真的没出路了吗?

前言 并不是没有出路&#xff0c;Java当下确实是比较的内卷&#xff0c;但关键在于个人&#xff0c;可以看看不同地方&#xff08;这里主要举例北上广深一线城市&#xff09;对于Java开发工程师这个职位的具体要求&#xff1a; 在以下北上广深这些一线大城市的面试招聘当中不…

CAPL中有符号和无符号数据类型的若干问题

我们知道CAPL中的整数类型分为:无符号(unsigned)和有符号(signed)。 无符号类型有: byte (unsigned, 1 Byte)word (unsigned, 2 Byte)dword (unsigned, 4 Byte)qword(unsigned, 8 Byte)有符号类型有: int (signed, 2 Byte)long (signed, 4 Byte)int64(signed, 8 Byte)什…

Sharding-JDBC数据加密详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

进销存+小程序商城一体化,多门店管理解决方案-免费试用|亿发

为了适应市场变化和增强管理效率&#xff0c;越来越多的连锁&#xff0c;门店开始转向进销存小程序商城一体化&#xff0c;将进销存与订货商城结合&#xff0c;以实现更便捷、有效的经营模式&#xff0c;让企业迈向数字化时代。让我们一起来看看进销存小程序商城一体化系统相比…

掌握企业声音:企业新闻舆情查询API的重要作用与应用

摘要 在信息时代&#xff0c;企业的声誉和形象可以在瞬息万变的新闻舆情中受到影响。为了保护企业的声誉和形象&#xff0c;以及及时洞察市场动向&#xff0c;企业新闻舆情查询 API 应运而生。本文将探讨企业新闻舆情查询 API 的重要作用与应用&#xff0c;以及它在帮助企业实…

Linux输出内容到指定文件

1. 记录终端输出至文本文件 1.1 解决方案1&#xff1a;利用>和>>命令 区别&#xff1a; > 是把输出转向到指定的文件。注意&#xff1a;如文件已存在的话会重新写入&#xff0c;文件原内容不会保留。 >> 是把输出附加到文件的后面&#xff0c;文件原内容会…

车间生产线数据采集网关让生产透明化

**钡铼技术加工车间解决方案&#xff0c;通过把网关安装至一体电控箱控制生产设备&#xff0c;并与控制传输带的PLC结合&#xff0c;打造出了一个易部署、易维护、高可靠性&#xff0c;可24小时作业的自动化生产产线。 为什么采集数据&#xff1f;——实现生产透明化 1、数据…

【LeetCode】96.不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…

C. Maximum Set

Problem - 1796C - Codeforces 思路&#xff1a;这个题在做的时候基本的思路是对的&#xff0c;但是没有想到O(1)求答案&#xff0c;枚举的然后T了&#xff0c;我们能够知道&#xff0c;假设前面的数小&#xff0c;那么每个数一定是前面的倍数&#xff0c;所以至少乘以2&#x…

C++ easyx大一期末作业利器

yNodeGUI_v2.0 紧跟着1.0版本的完成&#xff0c;又到了激动人心的C期末作业了。(上学期是C语言的),这学期&#xff0c;我仅仅改了一点点上学期的期末作业&#xff0c;然后很轻松的水…啊不&#xff0c;完成了这次的期末作业。 所以&#xff0c;大家一定要注重复用&#xff01…

go学习 4、复合数据类型

4、复合数据类型 数组、slice、map和结构体 如何使用结构体来解码和编码到对应JSON格式的数据&#xff0c;并且通过结合使用模板来生成HTML页面 数组和结构体是聚合类型;它们的值由许多元素或成员字段的值组成。数组是由同构的元素组成&#xff08;每个数组元素都是完全相同的…

【2023】分享国内外大厂开发主要AI网站

大厂原版 OpenAI ChatGPT 921 New Bing 415 Notion AI 90 百度文心一言 467 TruthGPT 105 讯飞星火认知大模型 141 进阶 Hugging Face 62 写作AI ​ Dyrt 394&#xff08;AI写作&#xff09; ​ DeepL Write 211&#xff08;写作翻译&#xff09; ​AI自动写文章 535 …

怎么转换音频格式?音频格式转换方法分享

当我们在处理音频文件时&#xff0c;可能会遇到一些问题。一些设备和应用程序可能无法播放特定的音频格式&#xff0c;或者需要将音频文件发送给其他人&#xff0c;但他们无法打开该格式。此外&#xff0c;某些网站和应用程序可能只支持特定类型的音频格式&#xff0c;因此我们…

数字孪生的现实意义及不足之处

数字孪生作为一项前沿技术&#xff0c;在当今数字化转型浪潮中发挥着越来越重要的作用。它是将物理世界和数字世界紧密结合的桥梁&#xff0c;为现实问题提供了全新的解决方案。然而数字孪生在现实生活中有什么现实意义嘛&#xff1f;实现难点又在哪&#xff1f;下面简单从几个…