前端demo_【前端3分钟】Script Error产生的原因和解法

15e2cd5d56a3221015d36fb0cc771b0f.png

Script Error对于前端开发者相信都不陌生,而且由于没有具体错误堆栈和代码行列号,成为可能是最神秘的错误之一。

下面介绍Script Error产生的原理和解决办法。

1、Script Error是如何产生的

  • 跨域资源引用

假如:abc.com 下的页面引用了属于 http://def.com(CDN) 的 demo.js 文件。

若运行中demo.jsrun()方法 内部报了一个异常,那么前端的错误捕获脚本,只会检测到一个 script error的异常。

这是由于浏览器基于安全考虑故意隐藏了其它域JS文件抛出的具体错误信息。这样可以有效避免敏感信息无意中被第三方(不受控制的)脚本捕获到,因此,浏览器只允许同域下的脚本捕获具体的错误信息。

具体可以参考WEBKIT源码:

bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, String& sourceURL){KURL targetURL = completeURL(sourceURL);if (securityOrigin()->canRequest(targetURL))return false;errorMessage = "Script error.";sourceURL = String();lineNumber = 0;return true;}

2、如何解决

知道浏览器为什么限制跨域资源引用,解决办法也不困难。在页面请求资源时,让浏览器允许我们发起请求,而服务器(CDN)也允许我们获取资源,从而得到浏览器运行资源的错误信息;这样分两步解决。

  • 第一步:给script标签增加 crossorigin 属性,让浏览器允许页面请求资源。
// 以下两种写法均可
<scrpit src="http://def.com/demo.js" crossorigin></script><scrpit src="http://def.com/demo.js" crossorigin="anonymous"></script> 
  • 第二步:给静态资源响应头增加允许跨域标记,让服务器允许资源返回。

服务器的HTTP响应头增加 Access-Control-Allow-Origin: * 或者 Access-Control-Allow-Origin: http://def.com

注:大部分主流CDN默认添加了Access-Control-Allow-Origin属性。

3、已添加 crossorigin 依然有 script error

由于部分浏览器对crossorigin属性不支持,又或者我们无法往HTTP请求响应头里面添加跨域属性,因此依然可能产生script error。

这时还可以通过try catch获取页面报错信息,将JS错误重新抛出或者上报。

  try {run(); // 调用demo.js中定义的run方法} catch (e) {console.log(e);throw e; }

4、参考

  • Cross-Origin Resource Sharing (CORS)
  • The crossorigin attribute: Requesting CORS access to content

5、更多文章分享

  • 阿里UC百亿级PV的前端监控平台实践 https://zhuanlan.zhihu.com/p/79978987
  • 10分钟彻底搞懂前端页面性能监控 https://zhuanlan.zhihu.com/p/82981365

6、岳鹰-WEB前端监控

阿里UC出品的岳鹰WEB前端监控,支持移动H5、PC站点、微信小程序以及支付宝小程序等各家小程序,PV、JS异常、页面性能等监控指标完整,已经对外开放,欢迎免费体验试用。

技术交流、第一时间掌握产品动态,欢迎联系微信小助手~

a2e20f0478c0a95e9ad6ed31c7efc0aa.png
微信号 effirst-assistant

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

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

相关文章

第二个一千行总结-数据结构C复习--知识点总结2--五到七章

第五章 数组与广义表 n维数组看作数据元素为n-1维数组的线性表 数组地址计算:略 特殊矩阵压缩: 三角矩阵;三对角矩阵(带状矩阵); 稀疏矩阵:存储数据总量小于百分之三十 稀疏矩阵用三元组(行,列,值)储存,定义如下: typedef struct{ int row, col;//行,列 int e; }…

基于Abp VNext框架设计 - Masstransit分布式消息

abp 通过IDistributedEventBus接口集成自IEventBus实现分布式事件消息的发布订阅。IEventBus在什么时机触发PublishAsync?当前UnitOfWork完成时&#xff0c;触发IEventBus的PublishAsync在没有事务环境下&#xff0c;同步调用IEventBus的PublishAsyncabp 默认实现基于RabbitMq…

[蓝桥杯2018决赛]换零钞-枚举

题目描述 x星球的钞票的面额只有&#xff1a;100元&#xff0c;5元&#xff0c;2元&#xff0c;1元&#xff0c;共4种。 小明去x星旅游&#xff0c;他手里只有2张100元的x星币&#xff0c;太不方便&#xff0c;恰好路过x星银行就去换零钱。 小明有点强迫症&#xff0c;他坚持要…

16进制数用空格分开 tcp_面试时,你是否被问到过TCP/IP协议?

点击蓝字关注我们看到这句话&#xff0c;有没有感到很熟悉呀&#xff1f;相信很多人在面试的时候都被要求&#xff0c;很多人会觉得我们在实际开发中一般用不到这些知识&#xff0c;所以对这些东西不屑一顾。但是小编认为想要成为一个完美的网工,那么对这些基础知识必须要有一定…

直接使用汇编编写 .NET Standard 库

前言Common Language Runtime&#xff08;CLR&#xff09;是一个很强大的运行时&#xff0c;它接收 Common Intermediate Language&#xff08;CIL&#xff09; 的输入并最终产生机器代码并执行。CIL 在 CLR 上相当于 ASM 汇编代码的存在。CLR 之上的语言 C#、F#、VB.NET 等语言…

[蓝桥杯2016决赛]七星填数-next_permutation枚举

题目描述 如下图所示&#xff1a; 在七角星的14个节点上填入1~14 的数字&#xff0c;不重复&#xff0c;不遗漏。要求每条直线上的四个数字之和必须相等。 图中已经给出了3个数字。请计算其它位置要填充的数字&#xff0c;答案唯一。 填好后&#xff0c;请提交绿色节点的4个数…

python的argsort函数_python——argsort函数

numpy中argsort函数用法&#xff0c;有需要的朋友可以参考下。在Python中使用help帮助>>> import numpy>>> help(numpy.argsort)Help on function argsort in module numpy.core.fromnumeric:argsort(a, axis-1, kindquicksort, orderNone)Returns the indic…

第三个一千行+500行总结-数据结构C复习--知识点总结3--七到九章

第七章 (接知识点总结2) 图 图的遍历: //深度优先搜索 #define OK 1 #define True 1 #define Error -1 #define False 0 typedef enum{DG, DN, UDG. UDN}Graph; int visited[MAX]; //Graph代表图的一种存储结构比如邻接表,邻接矩阵 void TranverseGraph(Graph g){ int…

系统蓝屏的几种姿势,确定不了解下么?

前言在 蓝屏&#xff08;BSOD&#xff09;转储设置&#xff0c;看本文就够了&#xff01;这篇文章里比较详细的介绍了蓝屏转储设置。做好设置后&#xff0c;我们就可以在需要的时候使系统蓝屏了。本文介绍几种使系统蓝屏的办法&#xff0c;当然肯定还有其它办法&#xff0c;如果…

最长公共子串-dp

题目: 给定两个字符串&#xff0c;求出它们之间最长的相同子字符串的长度。 公共子串和公共子序列不同&#xff0c;公共子序列不要求连续&#xff0c;但公共子串必须是连续的。如: A “helloworld” B “loop” A和B的最长公共子序列是"loo",但最长公共子串是&quo…

the python challenge_The Python Challenge 谜题全解(持续更新)

Python Challenge(0-2)是个很有意思的网站&#xff0c;可以磨练使用python的技巧&#xff0c;每一关都有挑战&#xff0c;要编写相应的代码算出关键词&#xff0c;才可以获取下一关的url&#xff0c;还是很好玩的QAQLEVEL 0显然是计算图片中的\(2^{38}\)&#xff0c;结果为2748…

智能对话引擎:两天快速打造疫情问答机器人

01微软AI技术开源知识库疫情机器人近一个月来&#xff0c;“新冠肺炎疫情”成了所有人的热点话题&#xff0c;抗击疫情的战役在全国紧张有序地进行着。随着全国各地的企业陆续复工&#xff0c;怎样防范、保护自己和家人成了当下每个人的焦点。为了配合奋战在一线的医护人员打赢…

数码管

题目背景 小明的单片机上面的LED显示屏坏掉了&#xff0c;于是他请你来为他修显示屏。 屏幕上可以显示0~9的数字&#xff0c;其中每个数字由7个小二极管组成&#xff0c;各个数字对应的表示方式如图所示&#xff1a; 题目描述 为了排除电路故障&#xff0c;现在你需要计算&am…

fh 幅频特性曲线怎么画fl_初学者怎么练习线条?教你如何画出流畅线条的技巧...

初学者怎么练习线条&#xff1f;怎样才能画出流畅线条&#xff1f;画出流畅线条有哪些技巧&#xff1f;想必这些问题都是绘画初学者们比较伤脑筋的问题&#xff0c;那么到底怎样才能画出流畅线条呢&#xff1f;今天灵猫课堂老师就在网络上收集整理了关于初学者怎么练习线条&…

.NET Core开发实战(第12课:配置变更监听)--学习笔记

12 | 配置变更监听&#xff1a;配置热更新能力的核心这一节讲解如何使用代码来监视配置变化并做出一些动作当我们需要追踪配置发生的变化&#xff0c;可以在变化发生时执行一些特定的操作配置主要提供了一个 GetReloadToken 方法&#xff0c;这就是跟踪配置的关键方法接着使用上…

icoding复习1,2

icoding复习 1 链表 倒数查找 1. 已知一个带有表头结点的单链表, 假设链表只给出了头指针L。在不改变链表的前提下&#xff0c;请设计一个尽可能高效的算法&#xff0c; 查找链表中倒数第k个位置上的结点&#xff08;k为正整数&#xff09;。 函数原型为&#xff1a;int lnk_s…

密电破译-dp

题目背景 墨家家主召集弟子的原因是因为截获了密电并破获了重大情报&#xff0c;“公主薨&#xff0c;国王失踪&#xff0c;墨家即将面临灭顶之灾”。 题目描述 密电是由大小写字母组成字符串&#xff0c;密电之所以能破译是因为墨家掌握了破解方法&#xff0c;密钥是一个整数…

ASP.NET Core Web API基于RESTFul APIs的集合结果过滤和分页

译者荐语&#xff1a;如何在RESTFul APIs中进行集合结果分页&#xff1f;还是用客户端来拼接链接地址么&#xff1f;原文来自互联网&#xff0c;由长沙DotNET技术社区【邹溪源】翻译。如译文侵犯您的版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。在ASP.NET Co…

icoding复习6 图

icoding复习6 1. 邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType; typedef enum{ DG, UDG }GraphType; typedef struct ArcNode{ int adjvex; InfoPtr *info; stru…

python帮助系统函数_【Python】【基础知识】【内置函数】【help的使用方法】

原英文帮助文档&#xff1a;help([object])Invoke the built-in help system. (This function is intended for interactive use.) If no argument is given, the interactive help system starts on the interpreter console. If the argument is a string, then the string i…