1 |
- var BJ_REPORT=function(u){if(u.BJ_REPORT)return u.BJ_REPORT;var f=[],t={},l={id:0,uin:0,url:"",offline_url:"",offline_auto_url:"",ext:null,level:4,ignore:[],random:1,delay:1e3,submit:null,repeat:5,offlineLog:!1,offlineLogExp:5,offlineLogAuto:!1},c={db:null,ready:function(n){var t=this;if(!window.indexedDB||!l.offlineLog)return l.offlineLog=!1,n();if(this.db)setTimeout(function(){n(null,t)},0);else{var e=window.indexedDB.open("badjs",1);if(!e)return l.offlineLog=!1,n();e.onerror=function(e){return n(e),l.offlineLog=!1,console.log("indexdb request error"),!0},e.onsuccess=function(e){t.db=e.target.result,setTimeout(function(){n(null,t)},500)},e.onupgradeneeded=function(e){var n=e.target.result;n.objectStoreNames.contains("logs")||n.createObjectStore("logs",{autoIncrement:!0})}}},insertToDB:function(e){this.getStore().add(e)},addLog:function(e){this.db&&this.insertToDB(e)},addLogs:function(e){if(this.db)for(var n=0;n<e.length;n++)this.addLog(e[n])},getLogs:function(t,r){if(this.db){var e=this.getStore().openCursor(),o=[];e.onsuccess=function(e){var n=e.target.result;n?(n.value.time>=t.start&&n.value.time<=t.end&&n.value.id==t.id&&n.value.uin==t.uin&&o.push(n.value),n.continue()):r(null,o)},e.onerror=function(e){return r(e),!0}}},clearDB:function(e){if(this.db){var t=this.getStore();if(e){var r=Date.now()-24*(e||2)*3600*1e3;t.openCursor().onsuccess=function(e){var n=e.target.result;n&&(n.value.time<r||!n.value.time)&&(t.delete(n.primaryKey),n.continue())}}else t.clear()}},getStore:function(){return this.db.transaction("logs","readwrite").objectStore("logs")}},d={isOBJByType:function(e,n){return Object.prototype.toString.call(e)==="[object "+(n||"Object")+"]"},isOBJ:function(e){return"object"===typeof e&&!!e},isEmpty:function(e){return null===e||!d.isOBJByType(e,"Number")&&!e},extend:function(e,n){for(var t in n)e[t]=n[t];return e},processError:function(n){try{if(n.stack){var e=n.stack.match("https?://[^\n]+"),t=(e=e?e[0]:"").match(":(\\d+):(\\d+)");return t||(t=[0,0,0]),{msg:d.processStackMsg(n),rowNum:t[1],colNum:t[2],target:e.replace(t[0],""),_orgMsg:n.toString()}}return n.name&&n.message&&n.description?{msg:JSON.stringify(n)}:n}catch(e){return n}},processStackMsg:function(e){var n=e.stack.replace(/\n/gi,"").split(/\bat\b/).slice(0,9).join("@").replace(/\?[^:]+/gi,""),t=e.toString();return n.indexOf(t)<0&&(n=t+"@"+n),n},isRepeat:function(e){if(!d.isOBJ(e))return!0;var n=e.msg;return(t[n]=(parseInt(t[n],10)||0)+1)>l.repeat}},s=u.onerror;u.onerror=function(e,n,t,r,o){var i=e;o&&o.stack&&(i=d.processStackMsg(o)),d.isOBJByType(i,"Event")&&(i+=i.type?"--"+i.type+"--"+(i.target?i.target.tagName+"::"+i.target.src:""):""),y.push({msg:i,target:n,rowNum:t,colNum:r,_orgMsg:e}),a(),s&&s.apply(u,arguments)};var p=function(e,n){var t=[],r=[],o=[];if(d.isOBJ(e))for(var i in e.level=e.level||l.level,e){var u=e[i];if(!d.isEmpty(u)){if(d.isOBJ(u))try{u=JSON.stringify(u)}catch(e){u="[BJ_REPORT detect value stringify error] "+e.toString()}o.push(i+":"+u),t.push(i+"="+encodeURIComponent(u)),r.push(i+"["+n+"]="+encodeURIComponent(u))}}return[r.join("&"),o.join(","),t.join("&")]},g=[],m=[],v=0,h=function(){if(clearTimeout(v),v=0,m.length){var e=l._reportUrl+m.join("&")+"&count="+m.length+"&_t="+ +new Date;if(l.submit)l.submit(e,m);else(new Image).src=e;m=[]}},a=function(e){if(l._reportUrl){for(var n,t=Math.random()>=l.random;f.length;){var r=!1,o=f.shift();if(o.msg=(o.msg+""||"").substr(0,500),!d.isRepeat(o)){var i=p(o,m.length);if(d.isOBJByType(l.ignore,"Array"))for(var u=0,s=l.ignore.length;u<s;u++){var a=l.ignore[u];if(d.isOBJByType(a,"RegExp")&&a.test(i[1])||d.isOBJByType(a,"Function")&&a(o,i[1])){r=!0;break}}r||(l.offlineLog&&(l.id,l.uin,n=o,n=d.extend({id:l.id,uin:l.uin,time:new Date-0},n),c.db?c.addLog(n):(c.db||g.length||c.ready(function(e,n){n&&g.length&&(n.addLogs(g),g=[])}),g.push(n))),t||20==o.level||(m.push(i[0]),l.onReport&&l.onReport(l.id,o)))}}e?h():v||(v=setTimeout(h,l.delay))}},y=u.BJ_REPORT={push:function(e){var n=d.isOBJ(e)?d.processError(e):{msg:e};if(l.ext&&!n.ext&&(n.ext=l.ext),n.from||(n.from=location.href),n._orgMsg){var t=n._orgMsg;delete n._orgMsg,n.level=2;var r=d.extend({},n);r.level=4,r.msg=t,f.push(n),f.push(r)}else f.push(n);return a(),y},report:function(e,n){return e&&y.push(e),n&&a(!0),y},info:function(e){return e&&(d.isOBJ(e)?e.level=2:e={msg:e,level:2},y.push(e)),y},debug:function(e){return e&&(d.isOBJ(e)?e.level=1:e={msg:e,level:1},y.push(e)),y},reportOfflineLog:function(){window.indexedDB?c.ready(function(e,n){if(n){var o=new Date-0-24*l.offlineLogExp*3600*1e3,i=new Date-0;n.getLogs({start:o,end:i,id:l.id,uin:l.uin},function(e,t){var r=document.createElement("iframe");r.name="badjs_offline_"+(new Date-0),r.frameborder=0,r.height=0,r.width=0,r.src="javascript:false;",r.onload=function(){var e=document.createElement("form");e.style.display="none",e.target=r.name,e.method="POST",e.action=l.offline_url||l.url.replace(/badjs$/,"offlineLog"),e.enctype.method="multipart/form-data";var n=document.createElement("input");n.style.display="none",n.type="hidden",n.name="offline_log",n.value=JSON.stringify({logs:t,userAgent:navigator.userAgent,startDate:o,endDate:i,id:l.id,uin:l.uin}),r.contentDocument.body.appendChild(e),e.appendChild(n),e.submit(),setTimeout(function(){document.body.removeChild(r)},1e4),r.onload=null},document.body.appendChild(r)})}}):BJ_REPORT.info("unsupport offlineLog")},offlineLog:function(e){return e&&(d.isOBJ(e)?e.level=20:e={msg:e,level:20},y.push(e)),y},init:function(e){if(d.isOBJ(e))for(var n in e)l[n]=e[n];var t=parseInt(l.id,10);return t&&(/qq\.com$/gi.test(location.hostname)&&(l.url||(l.url="//badjs2.qq.com/badjs"),l.uin||(l.uin=parseInt((document.cookie.match(/\buin=\D+(\d+)/)||[])[1],10))),l._reportUrl=(l.url||"/badjs")+"?id="+t+"&uin="+l.uin+"&"),f.length&&a(),c._initing||(c._initing=!0,c.ready(function(e,n){n&&setTimeout(function(){n.clearDB(l.offlineLogExp),setTimeout(function(){var e;l.offlineLogAuto&&((e=document.createElement("script")).src=l.offline_auto_url||l.url.replace(/badjs$/,"offlineAuto")+"?id="+l.id+"&uin="+l.uin,window._badjsOfflineAuto=function(e){e&&BJ_REPORT.reportOfflineLog()},document.head.appendChild(e))},5e3)},1e3)})),y},__onerror__:u.onerror};return"undefined"!=typeof console&&console.error&&setTimeout(function(){var e=((location.hash||"").match(/([#&])BJ_ERROR=([^&$]+)/)||[])[2];e&&console.error("BJ_ERROR",decodeURIComponent(e).replace(/(:\d+:\d+)\s*/g,"$1\n"))},0),y}(window);"undefined"!=typeof module&&(module.exports=BJ_REPORT),function(i){if(i.BJ_REPORT){var r=function(e){i.BJ_REPORT.push(e)},n={};i.BJ_REPORT.tryJs=function(e){return e&&(r=e),n};var o,t=function(e,n){for(var t in n)e[t]=n[t]},s=function(e){return"function"==typeof e},a=function(e,t){return function(){try{return e.apply(this,t||arguments)}catch(e){if(r(e),e.stack&&console&&console.error&&console.error("[BJ-REPORT]",e.stack),!o){var n=i.onerror;i.onerror=function(){},o=setTimeout(function(){i.onerror=n,o=null},50)}throw e}}},u=function(o){return function(){for(var e,n=[],t=0,r=arguments.length;t<r;t++)e=arguments[t],s(e)&&(e=a(e)),n.push(e);return o.apply(this,n)}},e=function(r){return function(e,n){if("string"==typeof e)try{e=new Function(e)}catch(e){throw e}var t=[].slice.call(arguments,2);return e=a(e,t.length&&t),r(e,n)}},f=function(i,u){return function(){for(var e,n,t=[],r=0,o=arguments.length;r<o;r++)e=arguments[r],s(e)&&(e.tryWrap?e=e.tryWrap:(n=a(e),e.tryWrap=n,e=n)),t.push(e);return i.apply(u||this,t)}},l=function(e){var n,t;for(n in e)t=e[n],s(t)&&(e[n]=a(t));return e};n.spyJquery=function(){var e,o,t=i.$;if(!t||!t.event)return n;t.zepto?(e=t.fn.on,o=t.fn.off,t.fn.on=f(e),t.fn.off=function(){for(var e,n=[],t=0,r=arguments.length;t<r;t++)e=arguments[t],s(e)&&e.tryWrap&&(e=e.tryWrap),n.push(e);return o.apply(this,n)}):window.jQuery&&(e=t.event.add,o=t.event.remove,t.event.add=f(e),t.event.remove=function(){for(var e,n=[],t=0,r=arguments.length;t<r;t++)e=arguments[t],s(e)&&e.tryWrap&&(e=e.tryWrap),n.push(e);return o.apply(this,n)});var r=t.ajax;return r&&(t.ajax=function(e,n){return n||(n=e,e=void 0),l(n),e?r.call(t,e,n):r.call(t,n)}),n},n.spyModules=function(){var e=i.require,o=i.define;return o&&o.amd&&e&&(i.require=u(e),t(i.require,e),i.define=u(o),t(i.define,o)),i.seajs&&o&&(i.define=function(){for(var e,n=[],t=0,r=arguments.length;t<r;t++)e=arguments[t],s(e)&&((e=a(e)).toString=function(e){return function(){return e.toString()}}(arguments[t])),n.push(e);return o.apply(this,n)},i.seajs.use=u(i.seajs.use),t(i.define,o)),n},n.spySystem=function(){return i.setTimeout=e(i.setTimeout),i.setInterval=e(i.setInterval),n},n.spyCustom=function(e){return s(e)?a(e):l(e)},n.spyAll=function(){return n.spyJquery().spyModules().spySystem(),n}}else console.error("please load bg-report first")}(window);
|