js異常捕獲

一、js異常捕獲的兩種方式:

1、try...catch
2、window.onerror

try...catch

  • try...catch只能捕獲運行時的錯誤,無法捕獲語法錯誤;
  • 可以拿到出錯的信息,堆棧,出錯的文件、行號、列號;
  • 需要借助工具把所有的function塊以及文件加入try,catch,可以在這個階段打入更多的靜態(tài)信息。

window.onerror

  • 可以捕捉語法錯誤,也可以捕捉運行時錯誤;
  • 可以拿到出錯的信息,堆棧,出錯的文件、行號、列號;
  • 只要在當前頁面執(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引入外鏈的標簽需要加多一個crossorigin的屬性

二、異步的錯誤如何捕獲:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容