| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | /** * Ajax接口调试功能 * * 原理: * *  devtools → background-page → content-page → console.* * * @author [email protected] */var AjaxDebugger = (function () {    /**     * 自定义Console     */    var FeHelperConsole = (function () {        var Types = 'log,debug,info,warn,error,group,groupCollapsed,groupEnd'.split(',');        var sendMessage = function (type, format, args) {            chrome.extension.sendMessage({                type: MSG_TYPE.AJAX_DEBUGGER_CONSOLE,                content: escape(JSON.stringify(Array.prototype.slice.call(arguments, 0)))            });        };        var that = new Function();        Types.forEach(function (tp) {            that[tp] = sendMessage.bind(that, tp);        });        return that;    })();    /**     * 分析Request     * @param request     */    var analyticRequest = function (request) {        var url = request.request.url || "",            urlSeparator = (url.indexOf("?") > -1) ? "&" : "?",            requestParams = (request.request.postData && request.request.postData.params) || [],            responseStatus = request.response.status + " " + request.response.statusText,            responseSize = request.response.bodySize + request.response.headersSize;        var queryString = '';        requestParams.forEach(function (param, index) {            queryString += (index == 0 ? urlSeparator : '&') + param.name + '=' + param.value;        });        var requestPath = '/' + (url.split('?') || [''])[0].replace('://', '').split('/').splice(1).join('/');        var responseTime = request.time > 1000 ? Math.ceil(request.time / 1000) + 's' : Math.ceil(request.time) + 'ms';        responseSize = responseSize > 1024 ? Math.ceil(responseSize / 1024) + 'KB' : Math.ceil(responseSize) + 'B';        // 获取Response的数据        request.getContent(function (content, encoding) {            if (content) {                try {                    request.response.responseData = JSON.parse(content);                }                catch (e) {                    request.response.responseData = content;                }            }            var header = "Ajax请求加载完毕 (" + [requestPath, responseStatus, responseTime, responseSize].join(" - ") + ") " + ' -- By FeHelper';            FeHelperConsole.group(header);            FeHelperConsole.log('AjaxURL  :', {url: url + queryString});            FeHelperConsole.log("Request  :", {request: request.request});            FeHelperConsole.log("Response :", {response: request.response});            FeHelperConsole.log("OtherInfo:", {                timeConsuming: responseTime,                timings: request.timings,                time: request.startedDateTime,                server: request.serverIPAddress            });            FeHelperConsole.groupEnd();        });    };    /**     * 监控Network中的请求     */    chrome.devtools.network.onRequestFinished.addListener(function (request) {        var reqUrl = request.request.url.split('?')[0] ;        if (/\.js$/.test(reqUrl)) {            return false;        }        var isXHR = /\.json$/.test(reqUrl) || (request.request.headers.concat(request.response.headers)).some(function (header) {                return (                (header.name == "X-Requested-With" && header.value == "XMLHttpRequest") ||                (header.name == "Content-Type" && (                        header.value == "application/x-www-form-urlencoded" ||                        /application\/json/.test(header.value) ||                        /application\/javascript/.test(header.value) ||                        /text\/javascript/.test(header.value)                ))                );            });        if (isXHR) {            chrome.extension.sendMessage({                type: MSG_TYPE.AJAX_DEBUGGER_SWITCH            }, function (debuggerSwitchOn) {                // 开关                if (debuggerSwitchOn) {                    analyticRequest(request);                }            });        }    });})();
 |