前端demo_【前端3分钟】Script Error产生的原因和解法
Script Error对于前端开发者相信都不陌生,而且由于没有具体错误堆栈和代码行列号,成为可能是最神秘的错误之一。
下面介绍Script Error产生的原理和解决办法。
1、Script Error是如何产生的
- 跨域资源引用
假如:abc.com
下的页面引用了属于 http://def.com
(CDN) 的 demo.js
文件。
若运行中demo.js
的 run()方法
内部报了一个异常,那么前端的错误捕获脚本,只会检测到一个 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异常、页面性能等监控指标完整,已经对外开放,欢迎免费体验试用。
技术交流、第一时间掌握产品动态,欢迎联系微信小助手~
前端demo_【前端3分钟】Script Error产生的原因和解法相关推荐
- java script error_java script error 错误解决方法
用了动易这么久了,有时一不小心改错模版文件或者 修改相关的JS,就会导致页面出现一些奇怪了 的弹出框 说什么 java script error 错误,烦死了. 今天特别研究了下,找到了解决这类问题的 ...
- 压缩过的js代码怎么还原_Fundebug 前端 JS插件更新至 1.7.0,拆分录屏代码,还原部分 Script error....
摘要: BUG 监控插件压缩至 18K. 1.7.0拆分了录屏代码,BUG 监控插件压缩至18K,另外我们还原了部分 Script error,帮助用户更方便地 Debug.请大家及时更新哈~ 拆分录 ...
- Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.
摘要: BUG监控插件压缩至18K. 1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug.请大家及时更新哈~ 拆分录屏代码 从 ...
- 解决 Script Error 的另类思路
2019独角兽企业重金招聘Python工程师标准>>> 本文由小芭乐发表 前端的同学如果用 window.onerror 事件做过监控,应该知道,跨域的脚本会给出 "Scr ...
- GMTC 大前端时代前端监控的最佳实践
摘要: 今天我分享的内容分成三个部分: 第一部分是"大前端时代前端监控新的变化", 讲述这些年来,前端监控一些新的视角以及最前沿的一些思考. 第二部分"前端监控的最佳实践 ...
- 前端:前端安全编码规范
前言 随着互联网高速的发展,信息安全已经成为企业重点关注焦点之一,而前端又是引发安全问题的高危据点,所以,作为一个前端开发人员,需要了解前端的安全问题,以及如何去预防.修复安全漏洞. 下面就以前端可能 ...
- GMTC 大前端时代前端监控的最佳实践 1
摘要: 今天我分享的内容分成三个部分: 第一部分是"大前端时代前端监控新的变化", 讲述这些年来,前端监控一些新的视角以及最前沿的一些思考. 第二部分"前端监控的最佳实践 ...
- 零基础不建议学前端_web前端开发零基础怎样入门-哈尔滨前端学习
web前端开发零基础怎样入门-哈尔滨前端学习,俗话说,知己知彼,百战百胜.要想学好web前端,首先要了解什么是web前端,下面由小编来给大家介绍一下: 1什么是web? Web就是在Http协议基础之 ...
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案...
后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440. 解决方法: ...
最新文章
- 第十六届全国大学生智能车安徽赛区承办学校参赛队伍
- 将一列数据转换成一个字段数据,逗号分隔
- jQuery1.9+中删除了live以后的替代方法
- 4、Orcal数据库dmp文件导入
- 个性化显示服务器,Linux系统个性化登录提示信息的方法
- 重新分区_电脑磁盘分区指南!一分钟就学会
- 管理动物园动物c++_中国动物园行业供需预测及投资潜力分析
- 详解CvScalar类型
- 单片机从00到99c语言,跪求单片机0~99数码管显示用C语言编写的程序
- java: Internal error in the mapping processor: java.lang.NullPointerException问题解决
- 服务器回退本次提交的文件,Git提交完整步骤与CMD命令使用
- 拉格朗日方程的三种推导方法之基于达朗贝尔原理推导
- pentaho mysql_pentaho BI Server-4.5 迁移到mysql详解
- 怎样用python删除excel中的_Python+Xlwings 删除Excel的行和列
- 计算机云维护是做什么的,IT运维是什么?云时代下的运维人员是怎样的?
- input type=file 禁止让用户手动输入
- 网关,路由,局域网内的通信及不同的网络间通信实现的原理剖析
- Win2003系统安装SQL Sever2000后1433端口未开放的解释
- c语言cdio案例,基于CDIO-OBE工程教育模式的C语言程序设计课程教学改革研究
- u盘文件不显示却占空间解决办法
热门文章
- linux之使用indent格式化代码总结
- Android之ANR异常及解决方法
- java离职交接文档_财务人员工作交接你知道么?没处理好不止将来风险大还可能违法...
- c语言入门数组,C语言入门之数组(2)
- sparkshelljarlib_Spark应用程序第三方jar文件依赖解决方案
- 电影院为何有散落的青瓜?
- 有趣程序和让人捧腹大笑的注释,你的注释还不够骚
- android pcm调节音量,调整PCM语音数据的音量
- python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法
- javadoc文档的生成方法_[springboot 开发单体web shop] 4. Swagger生成Javadoc