当前位置: 首页 > news >正文

chrome浏览器拓展插件捕获页面的响应体内容

chrome.webRequest

chrome插件提供有chrome.webRequest这么个API,这是一个系列API,允许开发者对请求的多个阶段进行事件监听。可是先告诉你这个方式行不通。不要用了,文后会有真正获取方式。

但比较可惜的是这个API能力比较有限,你不能通过它直接获取到响应内容。

onBeforeRequest(可选同步)

在请求即将发生时触发。此事件在建立任何 TCP 连接之前发送,可以 用于取消或重定向请求。

onBeforeSendHeaders(可选同步)

在请求即将发生且初始标头准备就绪时触发。该事件为 旨在允许扩展程序添加、修改和删除请求标头 (*)。通过 onBeforeSendHeaders 事件传递到所有订阅者,因此不同的订阅者可能会尝试 修改请求;请参阅实现详情部分,了解具体方法。此活动 可用于取消请求。

onSendHeaders

在所有扩展程序都有机会修改请求标头后触发,并显示最终版本 (*) 版本。该事件在标头发送到广告网络之前触发。此活动是 信息丰富,并异步处理。不允许修改或取消请求。

onHeadersReceived(可选同步)

每次收到 HTTP(S) 响应标头时触发。由于重定向和身份验证的原因 请求,每个请求可能会发生多次请求此事件旨在让扩展程序 添加、修改和删除响应标头,例如传入的 Content-Type 标头。缓存 指令会在此事件触发之前进行处理,因此修改 Cache-Control 等标头 对浏览器的缓存没有影响。还可以取消或重定向请求。

onAuthRequired(可选同步)

在请求需要对用户进行身份验证时触发。该事件可以同步处理, 提供身份验证凭据。请注意,扩展程序可能会提供无效的凭据。照顾好自己 避免因反复提供无效凭据而进入无限循环。这也可用于 取消请求。

onBeforeRedirect

即将执行重定向时触发。重定向可由 HTTP 响应触发 代码或扩展程序此事件提供信息,并会异步处理。不允许 以修改或取消请求。

onResponseStarted

收到响应正文的第一个字节时触发。对于 HTTP 请求,这意味着 提供状态行和响应标头。此活动仅供参考,且已处理 异步执行。不允许修改或取消请求。

onCompleted

成功处理请求时触发。

onErrorOccurred

无法成功处理请求时触发。

Web 请求 API 可保证对于每个请求,onCompleted 或 onErrorOccurred 作为最终事件触发,但有一个例外情况:如果请求被重定向到data://网址, onBeforeRedirect 是最后报告的事件。

* 请注意,网络请求 API 将网络堆栈的抽象呈现给扩展程序。 在内部,一个网址请求可拆分为多个 HTTP 请求(例如,抓取单个网址) 字节范围),也可以由网络堆栈处理,无需与 。因此,API 不会提供发送到 。例如,与缓存相关的所有标头对扩展程序来说都是不可见的。

解决方法

替换页面中的请求方法没用,很多网站自己会重写XMLHttpRequest,所以唯一的办法就是使用vconsole这个依赖库实现,通过修改这个vconsole源码来实现,vconsole是一个开源项目:https://github.com/Tencent/vConsole

使用的时候记得用在content里面:

简单来说就是,content_scripts和目标页面是运行在一块的,DOM这些是共用一套,但是Javascript执行环境是隔离的。这也就解释了为啥上面替换没生效,因为上面的脚本换掉的是自己执行环境中的XMLHttpRequest,而不是目标页面的。

那么,能不能让注入代码的执行环境和目标页面的执行环境不隔离呢?

这是个好问题。答案是可以的,chrome插件提供了一个叫world的配置项,它有两个值:ISOLATED(默认值)和MAIN。前者指明content_scripts是在隔离的环境中执行的,后者指明content_scripts和目标页面在一个环境中执行

相关文章:

  • 深度学习知识:softlabel策略
  • chrome浏览器插件拓展捕获页面的响应体内容
  • AI+办公 Task2
  • Nacos入门实战(二)配置中心及配置实战
  • 在shell中分割文件
  • Python-树状数组算法入门
  • Linux中基础开发工具详细介绍
  • 16.AVL树实现
  • 关于 NoC 中数据安全传输的设计与实现的详细介绍
  • C++ 容器库概述:序列容器、关联容器与无序关联容器的原理、性能与应用
  • Docker Compose 使用笔记
  • QT 学习一 paintEvent,QPainter ,QImage
  • 智慧城市运行管理服务平台建设方案
  • STM32串口通信
  • ‘java‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 【网络】什么是 IHL(Internet Header Length,首部长度)TTL(Time To Live,生存时间)?
  • 【编解码技术】什么是编码复杂度?
  • SpringMVC(三)响应处理
  • 构建智能汽车地图标准体系:自动驾驶技术的基石
  • 一文讲清楚CUDA与PyTorch、GPU之间的关系
  • 新建网站怎么想谷歌和百度提交/莱阳seo排名
  • 找个免费的网站这么难吗/百度霸屏推广
  • 微网站注册/在运营中seo是什么意思
  • 外贸手机网站建设/宣传推广策略
  • 是想建个网站 用本地做服务器/百度一下百度搜索网站
  • 宿州哪有做网站的/b站推广形式