Electron获取webview中ajax请求内容的方法

本文介绍了如何在Electron应用中利用webview的preload特性,劫持原生XHRHttpRequest类来获取ajax请求的内容。由于 Electron 的 webRequest 模块无法直接获取请求内容,特别是对于不能重复的POST请求,作者提出了一种解决方案,即通过在preload脚本中替换原生的XHR类,实现在请求发送前捕获内容,然后通过ipcRenderer.sendToHost将内容传递到主进程。
摘要由CSDN通过智能技术生成

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 

/**
 * xhr_proxy.js
 * 通过劫持原生XMLHttpRequest实现对页面ajax请求的监听
 * @author binaryfire
 */
const READY_STATE_CHANGE = 'rea
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值