前端代碼監(jiān)控Beta 0.0.1

最近在做一個前端監(jiān)控的js

如圖党瓮,一個大概的思路是這樣的翁逞。

圖片版


簡單看下哈

--------------------------------------------------------文本版


# 代碼異常處理

## 參考文章

### http://web.jobbole.com/93684/

### https://www.cnblogs.com/luozhihao/p/8635507.html

### https://segmentfault.com/a/1190000014672384

### https://juejin.im/post/5b5dcfb46fb9a04f8f37afbb

### http://www.reibang.com/p/fc622f8cff99

### https://juejin.im/post/5aaa93345188257bf550cbfd?utm_medium=fe&utm_source=weixinqun

* 比較完善

##try-catch異常處理

### 缺點

*1.無法識別語法錯誤

*2.無法處理異步操作發(fā)生的錯誤

###try{代碼塊}catch{處理方法}

## window.onerror異常處理

### 優(yōu)點

*1.可處理異步錯誤

### 缺點

*1.無法識別語法錯誤

*2.無法捕獲網(wǎng)絡(luò)異常的錯誤(404)

*3.靜態(tài)資源跨域無法捕獲到錯誤信息

* 解決方法

*1.標簽添加crossorigin=”anonymous”

*2.對應(yīng)服務(wù)器所有域可訪問

*4.代碼壓縮無法精確到位置

* 解決方法

*1.sourceMap

### 注意點

*1.寫在JS腳本前面

*2.需要返回true潦嘶,否則控制臺依舊顯示錯誤

### demoCode

*? ? ? ? window.onerror =function (msg, url, row, col, error) {

console.log(msg,? url,? row, col, error)

return true;

};

// 無message 方法

### vue

* dev

* webpack config 中 dev 配置? devTools 配置生成sourcemap? 即 #source-map

* build

* 可以正常獲取到錯誤內(nèi)容

## 重寫console.error

###message

* 錯誤信息

### stack

* 錯誤提示床佳,只取第一級錯誤信息

### window.console.error=function(error){let {message,stack} = error}

## 資源的異常

### img

* window.addEventListener('error',()=>{if(img){this.src = demo.png}})

### window.addEventListener('error',function(){})? ? 用這個方法監(jiān)聽圖片的異常怕品,onerror不能監(jiān)聽的到

## promise

### promise內(nèi)部發(fā)生的錯誤

* promise實例未書寫catch捕獲異常

* 導致try-catch和window.onerror不能發(fā)現(xiàn)異常

* 處理方法

*1.每個實例書寫catch捕獲異常處理

*2.添加promise全局異常捕獲事件 unhandlededrejection

* window.addEventListener('unhandledrejection',function(e){e.preventDefault() ajax })

## 框架異常處理

### vue

* errorHandler

* Vue.config.errorHandler=function (err, vm, info) {}

* 僅在 組件渲染期間和watch中自動觸發(fā)

* 建議在vue項目中峡钓,項目組員自己書寫

## 代碼壓縮后解析

### sourcemap

* https://www.npmjs.com/package/source-map/v/0.6.1#new-sourcemapconsumerrawsourcemap

### 版本

*0.6.1

* 由于0.7+之后使用了 WebAssembly 寫法,IE和360不支持夭委,故使用0.6.1版本幅狮。壓縮包可到git獲取

###sourceMap API

*SourceMapConsumer

* 具體可看npm 文檔

### 總結(jié)

* 代碼壓縮后解析,必須要有編譯出來的js的map文件株灸,具體可在壓縮的js最后一行可看到map文件路徑彪笼。在felog.js 中,邏輯是先取到 壓縮后的js文件的全名蚂且,然后拼接.map 字段配猫,再用ajax去請求 map文件回來,然后才通過SourceMapConsumer 分析map文件杏死,得出源文件和行數(shù)泵肄。

## 上報的內(nèi)容

###type

* string

*error

* window.onerror

* console.error

* promiseerror

* warn

* console.warn

* info

* console.info

###line

* string

###prj_id

* string

###url

* string

### brower_info

* string

###create_time

* date

###source

* string

###error_msg

* string

## 錯誤上報

###ajax

* 訪問量巨大的情況下,錯誤信息過多

* 設(shè)置采集率

*if(Math.random < x){ajax}

### 動態(tài)創(chuàng)建img

*function report(error) {

var reportUrl ='http://xxxx/report';

? ? new Image().src = reportUrl +'error=' + error;

}

## 成熟的系統(tǒng)

### BadJS

* 鵝廠封裝的window.onerror事件

* https://github.com/BetterJS

* 介紹

* http://slides.com/loskael/badjs/fullscreen#/

* 開源

### FdSafe

* 阿里

### JSTracker

* 淘寶

### ravenjs

* 國外

## 方法總結(jié)

### 使用window.onerror捕獲JS運行時錯誤

### 使用window.addEventListener('unhandledrejection')捕獲未處理的promise reject錯誤

### 重寫console.error捕獲console.error錯誤

###在跨域腳本上配置crossorigin="anonymous"捕獲跨域腳本錯誤

### window.addEventListener('error')捕獲資源加載錯誤淑翼。因為它也能捕獲js運行時錯誤腐巢,為避免重復上報js運行時錯誤,此時只有event.srcElement inatanceof HTMLScriptElement或HTMLLinkElement或HTMLImageElement時才上報

### 重寫window.XMLHttpRequest和window.fetch捕獲請求錯誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玄括,一起剝皮案震驚了整個濱河市冯丙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遭京,老刑警劉巖胃惜,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哪雕,居然都是意外死亡船殉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門斯嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來利虫,“玉大人挨厚,你說我怎么就攤上這事】繁梗” “怎么了铃诬?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵作谭,是天一觀的道長要出。 經(jīng)常有香客問我吭净,道長,這世上最難降的妖魔是什么理郑? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任蹄溉,我火速辦了婚禮咨油,結(jié)果婚禮上您炉,老公的妹妹穿的比我還像新娘。我一直安慰自己役电,他們只是感情好赚爵,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著法瑟,像睡著了一般冀膝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎挟,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天窝剖,我揣著相機與錄音,去河邊找鬼酥夭。 笑死赐纱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的熬北。 我是一名探鬼主播疙描,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讶隐!你這毒婦竟也來了起胰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巫延,失蹤者是張志新(化名)和其女友劉穎效五,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炉峰,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡火俄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讲冠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓜客。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谱仪,到底是詐尸還是另有隱情玻熙,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布疯攒,位于F島的核電站嗦随,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏敬尺。R本人自食惡果不足惜枚尼,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砂吞。 院中可真熱鬧署恍,春花似錦、人聲如沸蜻直。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽概而。三九已至呼巷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赎瑰,已是汗流浹背王悍。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留餐曼,地道東北人压储。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像晋辆,于是被迫代替她去往敵國和親渠脉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 我中學時代很喜歡讀林清玄的散文,在我們那個小縣城霸饲,書店里可供挑選的書并不多为朋。所以可見,這位臺灣作家在2000年左右...
    李娜_閱讀 777評論 3 7
  • 當我今早聽完子木的《金錢管理》分享厚脉,心里無比愉悅和興奮习寸,就在前10分鐘,還收到別人送來的金錢哦傻工,還是現(xiàn)金霞溪。這是否寓...
    垚垚涵涵媽閱讀 685評論 0 4
  • 1孵滞、javascript是函數(shù)式編程2、每個模塊被引入的時候形成閉包鸯匹,全局變量就變成了局部變量
    hkingby閱讀 191評論 0 0
  • 后來在某天深夜里坊饶,我想起來的確有那么一位少年。 初二跟著學校去參加為期兩天的象棋比賽殴蓬,舉辦地點在菱湖小學匿级。第一...
    不換愛人的瓦閱讀 375評論 0 0