Electron中,可以通过WebRequest监听webview中请求的各个阶段,并且获取或修改请求头和响应头。
但却没有提供获取请求内容的方法。那么如何获取请求内容呢?
首先,我们可以通过比较暴力的方法,就是在webRequest.onCompleted时,重新利用如http模块,对url再发送一次请求,从而获取请求内容。
但这个方法也有弊端,那就是,某些ajax请求,是不能重复的,尤其是POST请求。
比如一个点赞功能,第一次请求服务端会返回成功。第二次再请求,服务端就会报错了。
那么如何做才能直接获取到ajax请求的内容呢?
接下来,我教大家一种方法,就是
利用webview的preload功能,劫持原生XHRHttpRequest类,来实现在Electron中获取ajax请求内容
原理是,Electron的webview标签,有个preload属性,可以在页面加载之前,注入指定的js脚本,并且这个js脚本是一定集成了node环境的。
那么我们就可以在这个脚本中,将原生的XHRHttpRequest类替换掉。每当页面中通过XHRHttpRequest发送ajax请求是,我们就可以先拿到内容,再返回给页面了。废话不多说,直接上代码
代码基于ES6
const READY_STATE_CHANGE = 'readystatechange';
let gHandlerList = [],//截获请求的处理函数列表
gIsInited = fa