一、js异常捕获的两种方式:
1、try...catch
2、window.onerror
try...catch
- try...catch只能捕获运行时的错误,无法捕获语法错误;
- 可以拿到出错的信息,堆栈,出错的文件、行号、列号;
- 需要借助工具把所有的function块以及文件加入try,catch,可以在这个阶段打入更多的静态信息。
window.onerror
- 可以捕捉语法错误,也可以捕捉运行时错误;
- 可以拿到出错的信息,堆栈,出错的文件、行号、列号;
- 只要在当前页面执行的js脚本出错都会捕捉到,例如:浏览器插件的javascript、或者flash抛出的异常等;
跨域的资源需要特殊头部支持。
二、跨域的错误如何捕获:
外部加载的JS抛出异常的时候,出于安全方面的考虑,js错误信息可能包含一些敏感信息,比如用户名、权限提示等,希望能够把这类信息屏蔽。目前跨域的场景下会触发这种安全限制,window.onerror无法获得具体出错信息,而只能得到Script error 0 0。
解决方法
- 响应头增加access-control-allow-origin
- 每个function包裹try-catch
- 切面包裹入口函数,try-catch
1、响应头增加access-control-allow-origin
连个步骤
① Access-Control-Allow-Origin header里设置允许cros的域
//nginx配置如下:
server{
listen 80;
server_name static.fourb.info;
location / {
root E:\FB\static-site\static;
proxy_pass http://static.fourb.info:8080;
access_log logs/fb.log main;
}
location ~ \.(css|doc|eip|exe|gif|ico|jpg|js|mp3|png|swf|xml|txt|bm|html|htm|json)$ {
root E:\FB\static-site\static;
add_header 'Access-Control-Allow-Origin' "*";
expires 7d;
}
}
② script引入外链的标签需要加多一个crossorigin的属性
网友评论