CHROME擴展筆記之監聽頁面xhr請求


在頁面頭部加載完時立即注入下面代碼,注入完成后如若有xhr請求就可以監聽到了

;(function () {
    if ( typeof window.CustomEvent === "function" ) return false;
   
    function CustomEvent ( event, params ) {
        params = params || { bubbles: false, cancelable: false, detail: undefined };
        var evt = document.createEvent( 'CustomEvent' );
        evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
        return evt;
    }   
    CustomEvent.prototype = window.Event.prototype;   
    window.CustomEvent = CustomEvent;
})();
;(function () {
    function ajaxEventTrigger(event) {
        var ajaxEvent = new CustomEvent(event, { detail: this });
        window.dispatchEvent(ajaxEvent);
    }
    
    var oldXHR = window.XMLHttpRequest;
   
    function newXHR() {
        var realXHR = new oldXHR();

        realXHR.addEventListener('abort', function () { ajaxEventTrigger.call(this, 'ajaxAbort'); }, false);
        realXHR.addEventListener('error', function () { ajaxEventTrigger.call(this, 'ajaxError'); }, false);
        realXHR.addEventListener('load', function () { ajaxEventTrigger.call(this, 'ajaxLoad'); }, false);
        realXHR.addEventListener('loadstart', function () { ajaxEventTrigger.call(this, 'ajaxLoadStart'); }, false);
        realXHR.addEventListener('progress', function () { ajaxEventTrigger.call(this, 'ajaxProgress'); }, false);
        realXHR.addEventListener('timeout', function () { ajaxEventTrigger.call(this, 'ajaxTimeout'); }, false);
        realXHR.addEventListener('loadend', function () { ajaxEventTrigger.call(this, 'ajaxLoadEnd'); }, false);
        realXHR.addEventListener('readystatechange', function() { ajaxEventTrigger.call(this, 'ajaxReadyStateChange'); }, false);

        let send = realXHR.send;
        realXHR.send = function(...arg){
            send.apply(realXHR,arg);
            realXHR.body = arg[0];
            ajaxEventTrigger.call(realXHR, 'ajaxSend');
        }

        let open = realXHR.open;
        realXHR.open = function(...arg){
            open.apply(realXHR,arg)
            realXHR.method = arg[0];
            realXHR.orignUrl = arg[1];
            realXHR.async = arg[2];
            ajaxEventTrigger.call(realXHR, 'ajaxOpen');
        }

        let setRequestHeader = realXHR.setRequestHeader;
        realXHR.requestHeader = {};
        realXHR.setRequestHeader = function(name, value){
            realXHR.requestHeader[name] = value;
            setRequestHeader.call(realXHR,name,value)
        }
        return realXHR;
    }
   
     window.XMLHttpRequest = newXHR;
})();
var Gpins_data = {};
// 監聽頁面的ajax
window.addEventListener("ajaxReadyStateChange",function(e){
    let xhr = e.detail;
    if(xhr.readyState == 4 && xhr.status == 200){
        // xhr.getAllResponseHeaders()  響應頭信息
        // xhr.requestHeader            請求頭信息
        // xhr.responseURL              請求的地址
        // xhr.responseText             響應內容
        // xhr.orignUrl                 請求的原始參數地址
        // xhr.body                     post參數,(get參數在url上面)
        
        console.log(xhr);
        
    }
});
// console.log({msg:'注入完成',time: (new Date()).valueOf(),data: new Date()});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM