一、js異常捕獲的兩種方式:
1雏蛮、try...catch
2注益、window.onerror
try...catch
- try...catch只能捕獲運(yùn)行時的錯誤轿塔,無法捕獲語法錯誤嘶朱;
- 可以拿到出錯的信息蛾坯,堆棧,出錯的文件疏遏、行號脉课、列號;
- 需要借助工具把所有的function塊以及文件加入try,catch改览,可以在這個階段打入更多的靜態(tài)信息下翎。
window.onerror
- 可以捕捉語法錯誤缤言,也可以捕捉運(yùn)行時錯誤宝当;
- 可以拿到出錯的信息,堆棧胆萧,出錯的文件庆揩、行號、列號跌穗;
- 只要在當(dāng)前頁面執(zhí)行的js腳本出錯都會捕捉到订晌,例如:瀏覽器插件的javascript、或者flash拋出的異常等蚌吸;
跨域的資源需要特殊頭部支持锈拨。
二、跨域的錯誤如何捕獲:
外部加載的JS拋出異常的時候羹唠,出于安全方面的考慮奕枢,js錯誤信息可能包含一些敏感信息,比如用戶名佩微、權(quán)限提示等缝彬,希望能夠把這類信息屏蔽。目前跨域的場景下會觸發(fā)這種安全限制哺眯,window.onerror無法獲得具體出錯信息谷浅,而只能得到Script error 0 0。
解決方法
- 響應(yīng)頭增加access-control-allow-origin
- 每個function包裹try-catch
- 切面包裹入口函數(shù),try-catch
1一疯、響應(yīng)頭增加access-control-allow-origin
連個步驟
① Access-Control-Allow-Origin header里設(shè)置允許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引入外鏈的標(biāo)簽需要加多一個crossorigin的屬性