Script Error是一个常见错误,但由于该错误不提供完整的报错信息&错误堆栈,问题排查往往无从下手。
异常原因
原因是发生错误的js脚本是跨域的外链脚本,浏览器这样做可以有效避免敏感信息无意中被不受控制的第三方脚本捕获。出于安全考虑,浏览器会刻意隐藏其他域的JS文件抛出的具体错误信息,这样做可以有效避免敏感信息无意中被不受控制的第三方脚本捕获。因此,浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。更多信息,请参见Webkit源码。
解决方案
1. 给所有外链script脚本设置属性crossorigin="anonymous"
<script src='baidu.com' crossorigin='anonymous'></script>
这样当引用的脚本抛出异常的时候就可以被监控脚本捕获到。
2. 异步加载的js也需要加上
如果开启了动态模块加载,如使用了React.lazy或动态import的话,动态加载的js也需要加上 crossorigin=" anonymous"。 以webpack为例:配置output.crossOriginLoading='anonymous'。webpack.js.org/configurati…
3. 无解的Safari 加入crossorigin后仍存在一些Scripterror,这些是safari等浏览器不支持crossorigin导致的。
目前无解,像手机钉钉打开页面,出现脚 本错误,只能抛出Script error.