CHROME扩展笔记之监听页面xhr请求

25 篇文章 1 订阅
22 篇文章 7 订阅

在页面头部加载完时立即注入下面代码,注入完成后如若有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()});
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值