Script error. 也被称为跨域错误,当网站请求并且执行一个非本域名下的脚本的时候,如果跨域脚本发生错误,就有可能抛出这个错误。由于应用中,我们的脚本都是放在 CDN 上的,因此这种错误最为常见。
其实这并不是一个 JavaScript Bug。但出于安全考虑,浏览器会刻意隐藏其他域的 JS 文件抛出的具体错误信息,这样做可以有效避免敏感信息无意中被不受控制的第三方脚本捕获。因此浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。更多信息,请参见 Webkit 源码。
具体解决方式:
假如您页面所在的域名为 "https://domain.com",CDN 地址为 "https://another-domain.com/app.js",下面为您介绍如何通过配置参数过滤掉 "Script error. @ (:0:0) " 错误信息。
步骤1:资源添加 crossorigin 属性。
<script src="http://another-domain.com/app.js" crossorigin="anonymous"></script>步骤2:CDN 添加 cors 响应头,这个基本是 cdn 默认的,所以实际上我们并不需要做什么。
Access-Control-Allow-Origin: *window.onerror 中只能捕获 Script error.,但是 try catch 中却能打印详细的错误栈。
<!doctype html>
<html>
<body>
<script src="http://another-domain.com/app.js"></script>
<script>
window.onerror = function (message, url, line, column, error) {
console.log(message, url, line, column, error);
}
try {
foo(); // 调用app.js中定义的foo方法
} catch (e) {
console.log(e);
throw e; // 主动抛出的错误捕获后不是 Script error
}
</script>
</body>
</html>如果不想解决,只想直接屏蔽,可以参考下一个问题,不上报特殊日志。