前端錯誤
這裡所說的前端錯誤是指,在使用者的瀏覽器中出現的js報錯。如下圖。
此類錯誤有幾個特徵:
- 報錯資訊一般發生在瀏覽器控制檯,普通使用者看不到。(舊版本ie可能會彈出報錯的提示框,在瀏覽器左下角狀態列有個錯誤提示的標誌)
- 報錯一般發生在特定版本的瀏覽器,偶現,或者測試時未發現。
- 報錯一般影響使用者某些特定操作,比如說某個按鈕點不了,某個列表打不開等。
一般怎麼處理錯誤:
在處理程式錯誤時,我們有幾個常見的辦法。一般我們預設,在開發及測試階段,錯誤已經處理完了大部分。剩下的小部分的問題,重點在於如何發現此類問題,只有在發現問題之後,才能夠去復現,修改,驗證。
『發現』此類問題,最常見的方法是使用window.onerror函式,在頁面頂部定義window.onerror,在之後的程式碼邏輯中,未被處理的錯誤會觸發onerror回撥。可以獲取到具體的出錯資訊,包含:『錯誤訊息、出錯的檔案、行號、列號、具體錯誤物件(stack)』。具體參考:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
這麼做有什麼問題,以及怎麼解決
跨域資源報錯
如果錯誤是在跨域的指令碼里面報出來的話,錯誤資訊只有『Script error』,沒有更詳細的內容。很明顯,這個也是瀏覽器同源策略所做的約束。具體解決辦法,給script標籤新增crossorigin="anonymous"屬性,對應的script資源新增Access-Control-Allow-Origin:* 響應頭。參考:https://blog.sentry.io/2016/05/17/what-is-script-error.html
這麼做完之後,還有另外一個問題。在使用webpack打包程式碼的時候,我們一般會使用code split,大部分的頁面邏輯都會使用chunk載入。而這些分割完的程式碼chunk,預設不會新增crossorigin屬性。webpack也對此新增了支援,可以新增crossOriginLoading配置。參考:https://webpack.js.org/configuration/output/#output-crossoriginloading
onerror覆蓋
在使用onerror的時候,大多使用window.onerror = function(){}這樣的寫法。這就導致一個頁面裡只有一個錯誤處理的函式,在多人協作開發的時候,嗯,確實有人會覆蓋onerror。需要注意避免。
錯誤資訊收集不全
錯誤資訊收集不全,也是在特定的場景下出現的問題。比如說上文中的報錯的示例,錯誤本身是在glsExam-xxx.js裡面報出來的,但是因為react捕獲了這個錯誤,然後丟擲了一個異常,然後錯誤就變成了是react報出來的了。而公司的報錯指令碼只取onerror裡的報錯訊息和報錯檔案,沒有stack資訊。這就導致看到的錯誤都是react在報。
這樣的報錯對我們來講沒有價值。解決的思路也比較簡單,對gentian預設的onerror處理函式做一次封裝,更新掉預設的react的報錯。
相關文章
- 前端錯誤集前端
- 淺談前端錯誤處理前端
- 前端錯誤監控與上報前端
- 做個前端錯誤監控前端
- 搭建前端錯誤監控系統前端
- 前端開發--如何快速定位錯誤前端
- 前端的水平線,錯誤處理和除錯前端除錯
- web前端之異常/錯誤監控Web前端
- 學習Web前端需要避免哪些錯誤Web前端
- 聊聊前端監控——錯誤監控篇前端
- springMVC下前端ajax報404錯誤SpringMVC前端
- 前端錯誤收集(Vue.js、微信小程式)前端Vue.js微信小程式
- web前端小白經常出現“四”個錯誤Web前端
- 前端錯誤收集以及統一異常處理前端
- 前端錯誤監控 -【Vue】與【Sentry】的結合前端Vue
- 前端開發最容易犯的13個JavaScript錯誤前端JavaScript
- 一些學Web前端最常見的錯誤分享!Web前端
- 前端:常見的6種HTML5錯誤用法前端HTML
- Vue SPA專案 + Sentry 實現前端錯誤監控Vue前端
- 前端面試10:錯誤監控/產品效能體系前端面試
- ajax成功請求到後臺,但是前端報404錯誤前端
- 如何比設計更懂設計-做好前端錯誤提示前端
- ORACLE 異常錯誤 錯誤號大全Oracle
- artison 命令列切換前端框架造成的前端資源載入錯誤,與前端資源編譯命令列前端框架編譯
- nginx 錯誤除錯Nginx除錯
- rac錯誤除錯除錯
- PbootCMS錯誤提示:執行SQL發生錯誤!錯誤:no such column: def1bootSQL
- ORACLE 錯誤Oracle
- JAVA 錯誤Java
- JavaFx 錯誤Java
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- Promise基礎(消化錯誤和丟擲錯誤)Promise
- 前端除錯前端除錯
- 前端報錯前端
- 錯誤和異常 (一):錯誤基礎知識
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- 識別這5個錯誤,進階高階web前端工程師!Web前端工程師
- JavaScript錯誤資訊JavaScript