鏈枃浣滆€咃細cjinhuo锛屾湭缁忔巿鏉冪姝㈣浆杞姐€傛€荤粨寮€婧愮殑鍓嶇鐩戞帶SDK锛歮itojs锛屾湁鍏磋叮鐨勬湅鍙嬪彲浠ュ幓鐪嬬湅~锛圫DK鍦ㄧ嚎Demo锛?!--鍒朵綔鍔ㄦ€佸浘鐗?->鏉ユ鏂囷紝鏈枃鍒嗕负涓夐儴鍒嗐€傚井淇″皬绋嬪簭鍚庡彴鐩戞帶锛屽疄鐜板井淇″皬绋嬪簭鍩嬬偣锛屽疄鐜版敹灏惧悗鍙般€傛帴涓嬫潵鍓嶇鐩戞帶绯诲垪鍐呭锛氬墠绔洃鎺э細鐩戞帶SDK鎵嬫妸鎵嬫暀-鏋舵瀯锛堝紑婧愶級鍓嶇鐩戞帶锛氱洃鎺DK鎵嬫妸鎵嬫暀-瀹炵幇锛堝紑婧愶級杩欑瘒鏂囩珷鐨勪富瑕佺洰鐨勬槸璇磋寰俊灏忕▼搴忥紙wx-mini锛夌洃鎺у拰Web鐩戞帶鐨勫尯鍒紝浠ュ強濡備綍缂栧啓灏忕▼搴忓煁鐐瑰拰閿欒鐩戞帶銆傚寰俊灏忕▼搴忕殑鐩戞帶涔熸槸閫氳繃鍔寔寰俊瀹樻柟锛屾姏鍑哄叏灞€鏉ュ疄鐜扮殑銆俹bject鏂规硶锛屽洜涓哄皬绋嬪簭鐨勮繍琛岀幆澧冩病鏈墂indow鍜宒ocument瀵硅薄锛屾墍浠ュ彧瀵瑰鏆撮湶浜嗕竴涓獁x鍏ㄥ眬瀵硅薄锛屾瘮濡傛垜鎯虫嫤鎴〉闈㈢殑ajax璇锋眰锛岄噸鍐檞indow銆傜闇€瑕侀噸鍐檞x.request鏉ョ洃鍚井淇″皬绋嬪簭鐨勭綉缁滆姹傘€傚井淇″皬绋嬪簭甯歌鐨勭綉缁滆姹傛湁锛歸x.requestwx.downloadFilewx.uploadFile鎵€浠ユ垜浠噸鍐欒繖涓変釜锛屽緱鍒板叆鍙傦細enumWxXhrTypes{request='request',downloadFile='downloadFile',uploadFile='uploadFile'}functionmonitorWxXhr(this:WxClient,notify:(eventName:WxEventTypes,data:any)=>void){consthookMethods=Object.keys(WxXhrTypes)constthat=thishookMethods.forEach((hook)=>{constoriginRequest=wx[hook]Object.defineProperty(wx,hook,{writable:true,enumerable:true,configurable:true,value:function(...args:any[]){constoptions=args[0]//鑾峰彇闇€瑕佺殑鏁版嵁淇℃伅const{url,method,header,reqData}=options//鏀堕泦灏忕▼搴忕殑璇锋眰淇℃伅consthttpCollect={request:{httpType:HttpTypes.XHR,url,method,data:reqData},response:{},time:Date.now()}//鎴愬姛鍥炶皟constsuccessHandler=function(res){httpCollect.response.data=res.data//閫氱煡璁㈤槄涓績notify(WxBaseEventTypes.REQUEST,httpCollect)returnoptions.success(res)}const_fail=options.fail//澶辫触鍥炶皟constfailHandler=function(err){//绯荤粺鍜岀綉缁滅骇澶辫触httpCollect.errMsg=err.errMsg//閫氱煡璁㈤槄涓績notify(WxBaseEventTypes.REQUEST,httpCollect)return_fail(err)}constactOptions={...options,success:successHandler,fail:failHandler}//杩斿洖鍘熷鍑芥暟returnoriginRequest.call(this,actOptions)}})})}瀹屾暣浠g爜璇风偣鍑昏繖閲岀洃鍚皬绋嬪簭鐨勮矾鐢卞垏鎹€傞鍏堝垪鍑哄彲鑳借Е鍙戝皬绋嬪簭璺敱鍒囨崲鐨勪簨浠讹細='navigateToMiniProgram',RouteFail='routeFail'}鎺ヤ笅鏉ラ噸鍐欎笂闈㈢殑浜嬩欢锛屼互NavigateTo涓轰緥锛歝onstmethods=[WxRouteEvents.NavigateTo]methods.forEach((method)=>{constoriginMethod=wx[鏂规硶]asFunctionObject.defineProperty(wx,method,{writable:true,enumerable:true,configurable:true,value:function(options){consttoUrl=(optionsasWechatMiniprogram.SwitchTabOption).urlconstdata={from:getCurrentRoute(),to:toUrl}notify(WxBaseEventTypes.ROUTE,data)returnoriginMethod.call(this,options)}})})鍏朵粬鏂规硶鍚岀悊锛屼絾闇€瑕佹敞鎰忓け璐ュ洖璋冪殑鑾峰彇淇℃伅銆傚畬鏁翠唬鐮佽鐐规鏌ョ湅绫讳技web绐楀彛鐨刼nerror鐩戞帶銆俹nerror锛屼絾鏄皬绋嬪簭杩斿洖鐨勪笉鏄痚rror瀵硅薄锛岃€屾槸瀛楃涓诧紝杩欎釜鍊奸渶瑕佽嚜宸辫В鏋愶紙娉細灏忕▼搴忓畼鏂规枃妗h鐨勬槸string锛屼笉杩囨垜鍦ㄦ煇寮€鍙戣€呯數鑴戜笂涔熺湅鍒拌繃error瀵硅薄)constoriginApp=AppApp=function(appOptions:WechatMiniprogram.App.Option){replaceOld(appOptions,'onError',function(originMethod:voidFun){returnfunction(...args:any):void{//璁╁師鏉ョ殑function鍦ㄦ姏鍑虹殑hooks涔嬪墠鎵ц锛屾柟渚垮煁鐐瑰垽鏂槸鍚﹂噸澶峿閲嶅啓App涓殑onError鏂规硶锛岃幏鍙栭敊璇俊鎭劧鍚庡垎鏋愭暟鎹€傚畬鏁翠唬鐮佽幏鍙栧皬绋嬪簭鐨則ab銆乼ouch绛変簨浠躲€傜敱浜庡皬绋嬪簭鏃犳硶鍏ㄥ眬鐩戝惉tab銆乼ouch绛変簨浠讹紝鏃犳硶鑾峰彇椤甸潰鐨刣om缁撴瀯锛屾墍浠ュ彧鑳戒粠鏂规硶鍙傛暟鍏ユ墜澶ф剰锛氭墍鏈夌殑浜嬩欢閮戒細鏈変竴涓弬鏁癳锛岄噷闈細鏈夌被鍨嬶紝鑺傜偣淇℃伅绛夛紝杩欎釜e涓€鑸槸鍑芥暟鐨勭涓€涓弬鏁帮紝鎵€浠ュ彧闇€瑕侀噸鍐橮age涓嬬殑鎵€鏈夊嚱鏁帮紝鍒ゆ柇鍑芥暟鏄惁鏄涓€涓弬鏁板寘鍚玹ype鍜宑urrentTarget锛屼緥濡傝繖鏍峰垽鏂細e&&e.type&&e.currentTargetconstoriginPage=PagePage=function(options){constlistenerTypes=[LinstenerTypes.Touchmove,LinstenerTypes.Tap]if(options){Object.keys(options).forEach((m)=>{if('function'!==typeofoptions[m]){return}//鍏叡鏂规硶锛屾槗浜庨噸鍐檙eplaceOld(options,m,function(originMethod:(args:any)=>void){returnfunction(...args:any):void{conste=args[0]//鍒ゆ柇鏄惁涓轰簨浠秈f(e&&e.type&&e.currentTarget&&!e.mitoWorked){if(linstenerTypes.indexOf(e.type)>-1){//鑾峰彇e锛宔灏嗗寘鍚被id鏁版嵁灞炴€?/notify(e)}}returnoriginMethod.apply(this,args)}}锛岀湡鐨勶級})}returnoriginPage(pageOptions)}娴嬭瘯灏忕▼搴忓彲浠ラ噰闆嗙殑淇℃伅锛屽涓嬪浘锛氬井淇″皬绋嬪簭鍩嬬偣鐨勫疄鐜板叾瀹炲氨鏄湪鍚勪釜鐢熷懡鍛ㄦ湡涓瓨鍌ㄥ拰鑾峰彇淇℃伅锛屽苟浣縤tuseful淇℃伅涓婃姤娴佺▼鍦烘櫙涓€锛氶渶瑕佷笂鎶ラ〉闈㈢殑鏇濆厜鏃堕暱鍜孭V銆傛柟娉曪細璁板綍椤甸潰鍒氬姞杞芥椂鐨勫紑濮嬫椂闂磗tartTime骞惰浣忓綋鍓嶈矾鐢憋紝椤甸潰鍒囨崲鏃剁敤褰撳墠鏃堕棿鍑忓幓寮€濮嬫椂闂达細Date.now()-startTime锛屽苟涓婃姤涓婁竴椤电殑璺敱.杩欓噷闇€瑕佷袱涓挬瀛愬嚱鏁帮細椤甸潰鍔犺浇鏃跺拰椤甸潰鍗歌浇鏃讹紝@mitojs/wx-mini鎻愪緵浜嗕竴绯诲垪閽╁瓙渚涘紑鍙戣€呰皟鐢紝姣斿涓婇潰涓や釜閽╁瓙鍦ㄥ皬绋嬪簭瀵瑰簲鐨勯〉闈㈠姞杞芥椂,pageOnLoad椤甸潰鍗歌浇鏃讹紝pageOnUnload杩欐椂鍊欐湁浜轰細璇达紝杩欎笉鏄井淇″皬绋嬪簭鑷甫鐨勯挬瀛愬嚱鏁板悧锛熷锛屼竴瀹氭槸寰俊鏈韩灏辨湁杩欎簺hook锛屾垜鍙互閲嶅啓鎵旀帀銆備竴鑸儏鍐典笅锛屾瘡涓狿age涓嬮兘鏈夊緢澶氶挬瀛愬嚱鏁般€傚鏋滀笉绋嶅井澶勭悊涓€涓嬶紝闇€瑕佸湪寰堝Page涓嬪啓寰堝hook銆備娇鐢⊿DK鍚庯紝鍙渶缂栧啓涓€娆″嵆鍙煁娌°€備緥瀛愶細constMitoInstance=MITO.init({pageOnShow,pageOnHide})wx.MitoInstance=MitoInstanceconstcurrentPage={startTime:0,page:null}functionpageOnShow(page){//杩涘叆椤甸潰鍩嬬偣wx.MitoInstance.trackSend({//鍙嚜瀹氫箟鐨刟ctionType:'PAGE',route:page.route})currentPage.startTime=Date.now()currentPage.page=page}functionpageOnHide(page){//绂诲紑椤甸潰鍩嬬偣constendTime=Date.now()constelapsedTime=endTime-currentPage.startTime//鑾峰彇淇℃伅骞舵姤鍛婂畠console.log('currentPage',currentPage)wx.MitoInstance.trackSend({//鍙嚜瀹氫箟鐨刟ctionType:'DURATION',//鏇濆厜鏃堕棿elapsedTime,//pageRouteroute:currentPage.page.route})}End馃鎬荤粨灏忕▼搴忛敊璇洃鎺х被浼间簬web銆傞噸鍐欏師浜嬩欢鏃舵敞鎰忚繑鍥炲€硷紝閬垮厤绡℃敼鍘熷€笺€傚煁鐐逛富瑕佹槸鑾峰彇姣忎釜閽╁瓙涓殑鍩嬬偣淇℃伅骞朵笂鎶ョ殑杩囩▼锛屾墍浠ュ厛鎶婂ぇ閮ㄥ垎閽╁瓙寮勫埌鎵嬶紝鐒跺悗DIY鑷繁鐨勫煁鐐广€傪煣愬紑婧愬皬绋嬪簭鐩戞帶鏂囨。銆傜洰鍓嶆湁浜哄湪浣跨敤mitojs鎼缓鑷繁鐨勭洃鎺у钩鍙版垨鑰呭煁娌$浉鍏充笟鍔°€傛湁鍏磋叮鐨勪笉濡ㄨ繃鏉ョ湅鐪嬪摝馃槝馃摓鎺級锛岄敊璇洃娴嬶紝鍩嬩笅鍏磋叮锛岀洿鎺ヨ仈绯绘垜鐨勫井淇★細cjinhuoHaveAGoodDay!!!
