apm.web.js 5.8 KB

 //ARMS监控开始===================================

 !(function (c, b, d, a) {
    c[a] || (c[a] = {}); c[a].config = {  //disabledHook:true, 加上此属性 api将只能手动上报
        pid: "ihdx2@043e593cad8efa9", appType: "web", imgUrl: "https://arms-retcode.aliyuncs.com/r.png?", sendResource: true, behavior: true, enableConsole: true, enableLinkTrace:true,
        ignore: {
                ignoreApis: 
                    function(str) { // 方法
                    if (str && (str && (str.toLocaleLowerCase().indexOf('acadsoc') < 0 && str.indexOf("/")!=0))) 
                    {
                        return true; //忽略不是acadsoc的api
                    }
                    return false;
                }
            },
        urlHelper:function(page){
            return page;
        }
    };
        with (b) with (body) with (insertBefore(createElement("script"), firstChild)) setAttribute("crossorigin", "", src = d)
    })(window, document, "https://retcode.alicdn.com/retcode/bl.js", "__bl");
     //ARMS监控结束===================================

     /* 因和53客服冲突 暂时禁用
    //api 监控开始===================================
    var open = window.XMLHttpRequest.prototype.open,
    send = window.XMLHttpRequest.prototype.send,
    onReadyStateChange;

    var timeList = [];

    function openReplacement(method, url, async, user, password) {
        var syncMode = async !== false ? 'async' : 'sync';
        console.warn(
            'Preparing ' +
            syncMode +
            ' HTTP request : ' +
            method +
            ' ' +
            url
        );


        if (url && (/(http.*:\/\/.*acadsoc.com.cn\/ajax\/|^\/)/gi.test(url))) 
        {
            timeList.push({url:url , begin:Date.now()});
        }

        console.log("reqopenReplacementuest:"+url);
        return open.apply(this, arguments);
    }

    function sendReplacement(data) {
        //console.warn('Sending HTTP request data : ', data);

        if(this.onreadystatechange) {
            this._onreadystatechange = this.onreadystatechange;
        }
        this.onreadystatechange = onReadyStateChangeReplacement;

        
        console.log("sendReplacement:");
        return send.apply(this, arguments);
    }

    function onReadyStateChangeReplacement() {
        //console.warn('HTTP request ready state changed : ' + this.readyState);

        if (this.responseURL && (/(http.*:\/\/.*acadsoc.com.cn\/ajax\/|^\/)/gi.test(this.responseURL))) //忽略不是acadsoc的api
        {
            var currentUrl = this.responseURL;
            var current =  timeList.filter(function(item){
                return currentUrl.indexOf(item.url) >= 0;
            });

            var execTime = current&&current.length>0 ? Date.now() - current[0].begin: -1;

            //校验返回值
            var respone = this.responseText;
            if(this.status != 200) 
            {
                window.__bl && __bl.api(currentUrl, false, execTime, 'lps ERROR-status:' + this.status, respone);
            }

            try {

                var obj = JSON.parse(respone);
                if(typeof obj == 'object' && obj)
                {
                    //json/对象

					if(currentUrl.indexOf("SMSCode")>0) //验证码发送出错
                    {
                        if("code" in obj && obj["code"] ==-3 ){
                            window.__bl && __bl.api(currentUrl, false, execTime, "-3 验证码发送出错", respone);
                        }
						else if("value" in obj && obj["value"]["code"] ==-3){
							 window.__bl && __bl.api(currentUrl, false, execTime, "-3 验证码发送出错", respone);
						}
                    }
                    else if(currentUrl.indexOf("Register")>0){ //注册出错
                        if("_r" in obj&& obj[_r] == -4)
                        {
                            window.__bl && __bl.api(currentUrl, false, execTime, "-4 注册出错", respone);
                        }
                    }
                }
                else if (typeof obj == 'number')
                {
                    //数字
                }
                else if (typeof obj == 'boolean')
                {
                    //bool
                }
                else{
                    console.log("api monitor else " + respone);
                    window.__bl && __bl.api(currentUrl, true, execTime, "api monitor else", respone);
                }

            } catch(e) {
                window.__bl && __bl.api(currentUrl, false, execTime, 'lps respone ERROR:' + e.message, respone);
            }

        }

        if(this._onreadystatechange) {
            return this._onreadystatechange.apply(this, arguments);
        }
    }

    window.XMLHttpRequest.prototype.open = openReplacement;
    window.XMLHttpRequest.prototype.send = sendReplacement;

    //api 监控结束===================================
    */

    //按钮监控开始===================================
    var currentEle=null;
    window.onerror = function (errorMessage, scriptURI, lineNo, columNo, error) {

            if(currentEle&&currentEle.indexOf("button")>=0){
                window.__bl && __bl.error(new Error('lps 功能异常 ' + error.stack), {
                filename: scriptURI, 
                lineno: lineNo, 
                colno: columNo,
                stack: error,
                element: currentEle
            });
        }
    }
    
    document.addEventListener('mousedown', function (ev) {
        currentEle = ev.target.type + "_" + ev.target.tagName + "_" + ev.target.name + "_" + ev.target.value + "_" + ev.target.id;
        //console.log(333+"_click_" + ev.target.type + "_" + ev.target.tagName + "_" + ev.target.name + "_" + ev.target.value + "_" + ev.target.id);
    })
    //按钮监控结束===================================