2019独角兽企业重金招聘Python工程师标准>>>

一些用户向我们反馈,Fundebug的JavaScript监控插件抓到了很多Script error.,然后行号和列号都是0...这就很尴尬了。

今天,我们来详细地解析一下Script error.,后续我们还会深度测试并且提供解决方法。

同源策略 (Same origin policy)

解释Script error.之前,我们先简单聊聊同源策略。摘自MDN - Same-origin policy:

Two pages have the same origin if the protocol, port (if one is specified), and host are the same for both pages.

所谓同源,就是指两个页面具有相同的协议、端口和主机(域名)。通过第三方加载的JavaScript脚本是不同源的。下面的表格简单列出了和https://fundebug.com/app.js是否同源的文件:

<style type="text/css"> code { text-overflow:clip;/*文本裁切*/ white-space:nowrap;/*强制不换行*/ overflow:hidden;/*溢出隐藏*/ } </style>

网址 是否同源 原因
https://fundebug.com/vendor.js
http://fundebug.com/vendor.js 协议不同
https://fundebug.com:8001/app.js 端口不同
https://docs.fundebug.com/nav.js 子域名不同
https://kiwenlau.com/totop.js 域名不同

没有同源策略的话,将会怎样?摘自同源策略详解及绕过 - FreeBuf:

假设你已经成功登录Gmail服务器,同时在同一个浏览器访问恶意站点(另一个浏览器选项卡)。没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说阅读你的私密邮件,发送虚假邮件,看你的聊天记录等等。 如果将Gmail替换为你的银行帐户,问题就大条了。

为啥出现Script error. ?

为了提升网站的访问速度,我们通常都会将静态资源文件(css, image, javascript)放在第三方CDN。当这些从第三方加载的JavaScript脚本执行出错,因为违背了同源策略, 为了保证用户信息不被泄露,错误信息不会显示出来,取而代之只会返回一个Script error.

暴露错误信息会怎样呢?摘自(Cryptic “Script Error.” reported in Javascript in Chrome and Firefox):

假想你不小心访问了一个恶意网站,网页里面偷偷放入了一段JavaScript脚本 <script src="cbcc.com/index.html">,这段脚本指向你使用的某银行网站首页。虽然脚本会执行失败,但是错误信息却有可能泄露你的信息。如果你已经登录过该银行网站并且处于登录状态,那么错误信息可能为'欢迎你 ....' is undefined;如果你没有登录,那么错误信息可能是'请登录...' is undefined。 然后黑客就可以根据这些信息确定你使用的银行网站,并且伪造一个钓鱼网站来骗取钱财。

源码

webkit源码如下:

bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int lineNumber, const String& sourceURL)
{EventTarget* target = errorEventTarget();if (!target)return false;...if (securityOrigin()->canRequest(targetUrl)) {message = errorMessage;line = lineNumber;sourceName = sourceURL;} else {message = "Script error.";sourceName = String();line = 0;}...
}

可知,浏览器会判断所加载的资源url是否同源(securityOrigin()->canRequest(targetUrl)),如果不同源,则将错误消息隐藏,赋值为Script error., 并且将行号设为0.

因此,如果我们从第三方CDN服务加载资源,如果出错的话,那么我们将只能看到Script error.

错误复现

我们用一个简单的例子测试一下。下面是index.html,我们使用onerror来捕获错误。

<!DOCTYPE html>
<html>
<head><title>Test Script error</title><script type="text/javascript">window.onerror = function(errorMessage, scriptURI, lineNumber, columnNumber, error){console.log(errorMessage);console.log(scriptURI);console.log(lineNumber);console.log(columnNumber);console.log(error);}</script><script type="text/javascript" src="./scripterror.js"></script>
</head>
<body>
</body>
</html>

scripterror.js中抛出一个Error对象:

throw new Error('Hello, Fundebug');

使用的http-server挂载文件,打开http://localhost:8080/index.html,

在Chrome浏览器控制台下,可以看到详细的出错信息:

为了复现Scrpt error., 将scripterror.js放到我在coding.net的个人项目下面:

<!DOCTYPE html>
<html>
<head><title>Test Script error</title><script type="text/javascript">window.onerror = function(errorMessage, scriptURI, lineNumber, columnNumber, error){console.log(errorMessage);console.log(scriptURI);console.log(lineNumber);console.log(columnNumber);console.log(error);}</script><script type="text/javascript" src="http://coding.net/u/stefanzan/p/stefanzan/git/raw/coding-pages/public/js/src/scripterror.js"></script>
</head>
<body>
</body>
</html>

运行http-server, 结果如下:

因为违背同源策略,这时只能拿到Script error.

总结

本文介绍了Script error.的由来,并提供了一个简单的实例来演示什么情况下出现Script error.。接下来,我们将对Script error进行深度测试并提出解决方法

版权声明:

转载时请注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2017/04/05/understand-script-error/

转载于:https://my.oschina.net/u/3375885/blog/876823

Script error.全面解析相关推荐

  1. 压缩过的js代码怎么还原_Fundebug 前端 JS插件更新至 1.7.0,拆分录屏代码,还原部分 Script error....

    摘要: BUG 监控插件压缩至 18K. 1.7.0拆分了录屏代码,BUG 监控插件压缩至18K,另外我们还原了部分 Script error,帮助用户更方便地 Debug.请大家及时更新哈~ 拆分录 ...

  2. Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.

    摘要: BUG监控插件压缩至18K. 1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug.请大家及时更新哈~ 拆分录屏代码 从 ...

  3. Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法

    Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...

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

    Script Error对于前端开发者相信都不陌生,而且由于没有具体错误堆栈和代码行列号,成为可能是最神秘的错误之一. 下面介绍Script Error产生的原理和解决办法. 1.Script Err ...

  5. 解决 Script Error 的另类思路

    2019独角兽企业重金招聘Python工程师标准>>> 本文由小芭乐发表 前端的同学如果用 window.onerror 事件做过监控,应该知道,跨域的脚本会给出 "Scr ...

  6. java中无法解析的编译问题怎么解决,java.lang.Error: 无法解析的编译问题

    Exception in thread "main " java.lang.Error: 无法解析的编译问题: 无法解析 MainWindow at MainWindow.main ...

  7. main java.lang,各位大哥办我看看,Exception in thread main java.lang.Error: 无法解析的编译有关问题...

    当前位置:我的异常网» J2SE » 各位大哥办我看看,Exception in thread "main& 各位大哥办我看看,Exception in thread "m ...

  8. java script error_java script error 错误解决方法

    用了动易这么久了,有时一不小心改错模版文件或者 修改相关的JS,就会导致页面出现一些奇怪了 的弹出框 说什么 java script error 错误,烦死了. 今天特别研究了下,找到了解决这类问题的 ...

  9. Ansys中meshing启动时经常弹出“script error”

    最近在学习ansys的流固耦合仿真,在打开ansys 的meshing 时,总是弹出 script error的错误. 卸载的软件重新安装还是没有效果,后来想明白是之前为了释放C盘内存,修改了系统的临 ...

  10. xShell运行Python脚本报错 Python script error 80040154

    xShell运行Python脚本报错 Python script error 80040154 这是由于没有安装 Python engine的原因. 解决方法如下: 1. 下载并安装 Python 访 ...

最新文章

  1. 线程的同步之Synchronized在单例模式中的应用
  2. git 撤销修改以及删除文件(亲测最后一个删除后还原)
  3. 1006. Sign In and Sign Out (25)
  4. linux的open的非组赛,Linux下的非阻塞IO库epoll
  5. JavaScript调用Web Services实现无刷新三联动
  6. 数据结构为什么那么难?
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院住院管理系统
  8. SAP License: 发票校验前收货后是否能更改物料价格
  9. 影视导航资源库api php,影视资源采集站
  10. 三星智能共享计算机软件,Samsung Smart View
  11. SOA面向服务架构详解
  12. ajaxSubmit异步提交
  13. 华为给出的测试账号里面的题
  14. VS Code设置缩进两个字符
  15. 如何提高思维能力(不止针对程序猿)
  16. 交互组件滚动条,搜索框,上传组件,翻页的微创新
  17. Windows PC连接苹果LG UltraFine 4K显示器教程
  18. 强化学习的探索和利用
  19. PAP认证、CHAP认证
  20. 廖雪峰讲python高阶函数求导_廖雪峰python课程笔记

热门文章

  1. VS2010_x86_编译错误
  2. PHP执行超时的那些事
  3. CUBRID学习笔记 43 insert into
  4. Visual Studio中删除所有空行
  5. The seventeenth day
  6. 使用T4模板动态生成邮件内容并储存到任意位置
  7. 【转】使用spring @Scheduled注解执行定时任务
  8. 40.广搜练习:洪水
  9. 重置SQLSERVER表的自增列,让自增列重新计数【转】
  10. 小瓜牛漫谈 — 获取资源文件