位置: IT常识 - 正文

[Chrome插件开发]监听网页请求和响应(chrome插件开发拦截ajax)

编辑:rootadmin
Chrome插件开发

推荐整理分享[Chrome插件开发]监听网页请求和响应(chrome插件开发拦截ajax),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:chrome插件开发框架,chrome插件开发文档,chrome插件开发 delphi,chrome插件开发拦截ajax,chrome插件开发文档,chrome插件开发,chrome插件开发文档,chrome插件开发文档,内容如对您有帮助,希望把文章链接给更多的朋友!

更新了使用油猴插件配合油猴脚本拦截请求数据的方式,比插件方式开发简单很多,推荐。 https://blog.csdn.net/Backspace110/article/details/128807263

监听网页请求和响应Chrome插件开发前言一、方案思路二、准备注入文件1. 监听XMLHttpRequest2.监听fetch三、注入1.权限设置2.注入文件注入到页面中总结前言

截至文章发布,chrome插件规范有v3和v2版本。我这里主要讲v2版本,他们改动不大,主要是manifest.json调整。

完整代码https://github.com/IOL0ol1/GetResponse 我们都能够在网上查到不少资料了。 不了解的可以先看看前置资料,个人认为对我这种只有c/c++/c#开发经验100%js新手来讲,我看的前置资料:

Chrome插件介绍 https://www.jianshu.com/p/3bfb248dacd9chrome插件的核心配置介绍 https://www.jianshu.com/p/db94dc5cd68dChrome插件的8种展示形式 https://www.jianshu.com/p/3f99a140276fchrome插件开发中5种类型的JS对比 https://www.jianshu.com/p/c57bef2cf43bchrome插件 各个js之间的消息通讯 https://www.jianshu.com/p/3c7fea458245补充 https://www.jianshu.com/p/77a1523b0c20 最权威的还是官方网址,不过google系你懂的。https://developer.chrome.com/docs/extensions/ Chrome插件的JS主要可以分为这5类:injected script (注入脚本,注入到document页面的脚本, 和页面js完全相同的上下文空间content script (内容脚本,能访问document,不能访问页面js中的数据popup script (弹窗脚本,点击插件的弹窗,和下文后台脚本差不多,而且可以互相访问,独立上下文空间background script (后台脚本,插件启用期间一直运行,独立上下文空间devtools script (自定义开发者工具,在F12中添加一个自定义选项卡

举个例子,我的插件是针对百度写的, 只要要打开浏览器,插件是启用状态,后台脚本就开始运行了。 我点击插件图标,弹窗弹出,触发弹窗脚本运行。 关闭弹窗,弹窗脚本结束 浏览器新建标签页A访问了百度,A页面的内容脚本和注入脚本开始运行。 浏览器新建标签页B访问了百度,B页面的内容脚本和注入脚本开始运行。 关闭标签页A,A页面的内容脚本和注入脚本结束运行。 关闭标签页B,B页面的内容脚本和注入脚本结束运行。 关闭浏览器或禁用插件,后台脚本结束。 后台脚本可以监听一些全局事件,而且可以发起跨域访问(全局的东西,没有域就不存在跨域,哈哈)。 内容脚本结合注入脚本主要处理当前页面,可以和后台脚本通讯。

[Chrome插件开发]监听网页请求和响应(chrome插件开发拦截ajax)

当然,这篇文章我是打算投原创的,所以主要写自己遇到的实际应用场景和解决方案: 我需要通过插件获取网页请求的响应数据,而且不能重复请求,即安装插件之后和之前,浏览器的请求数量不应发生改变(插件需要对后端透明)。

一、方案思路

因为要获取响应的body数据,所以基本思路就是通过content script 向当前页面注入 injected script 监听页面的请求和响应数据。但是存在两种 XMLHttpRequest 和 fetch 两种js请求操作,我需要监听这两种请求,所以下文会细说具体操作,我们可以根据应用场景选用。

二、准备注入文件1. 监听XMLHttpRequest

我的方案是将监听之后的响应数据发送到content script,这部分可以根据实际需要修改。 injectedXhr.js代码:

(function (xhr) { var XHR = XMLHttpRequest.prototype; var open = XHR.open; var send = XHR.send; XHR.open = function (method, url) { this._method = method; this._url = url; return open.apply(this, arguments); }; XHR.send = function (postData) { console.log('xhr request:', this._method, this._url, postData); this.addEventListener('load', function () { // sessionStorage['key'] = JSON.stringify(response); // 插件需要添加'storage'权限 // document.cookie // localStorage['key'] window.postMessage({ type: 'xhr', data: this.response }, '*'); // 将响应发送到 content script }); return send.apply(this, arguments); };})(XMLHttpRequest);2.监听fetch

代码如下(示例):

(function () { let origFetch = window.fetch; window.fetch = async function (...args) { const response = await origFetch(...args); console.log('fetch request:', args); response .clone() .blob() // 此处需要根据不同数据调用不同方法,这里演示的是二进制大文件,比如音频 .then(data => { // 对于二进制大文件可以创建为URL(blob:开头),供其它脚本访问 //sessionStorage['wave'] = URL.createObjectURL(data); // 插件需要添加'storage'权限 window.postMessage({ type: 'fetch', data: URL.createObjectURL(data) }, '*'); // send to content script }) .catch(err => console.error(err)); return response; }})();

以上两段代码存储为 injected.js,下文中我们将它注入到页面。

三、注入1.权限设置

需要注意manifest.json文件的设置,需要将注入到页面的文件设置为web_accessible_resources permissions如果有需要的权限也需要设置好

"content_scripts": [ { "matches": [ "*://*.yourweb.com/*" ], "js": [ "./content.js" ], "run_at": "document_start", "all_frames": true } ], "web_accessible_resources": ["injected.js"] "permissions": [ "cookies", "storage", "<all_urls>" ]2.注入文件注入到页面中

content.js文件中将injected.js文件注入到页面中。

console.log('content script start');// inject injected scriptvar s = document.createElement('script');s.src = chrome.runtime.getURL('injected.js');s.onload = function () { this.remove();};(document.head || document.documentElement).appendChild(s);// receive message from injected scriptwindow.addEventListener('message', function (e) { console.log('content script received:' , e.data.type, e.data.data);});总结

一点点笔记,目前刚接触js,不是特别了解,很多语言层面的特性不是很会,计划是之后转到ts上。 另外如果没有特殊需求,还是推荐使用油猴插件+油猴脚本,省去很多无聊的负担。 顺便吐槽js真是个屎坑。require/import这种c(#include)都有的模块引用机制还得到es6才添加到语言层面。 很多语言层面应该支持的东西,都要通过库来曲线实现,整个一填坑史。

本文链接地址:https://www.jiuchutong.com/zhishi/311929.html 转载请保留说明!

上一篇:vue报错:We‘re sorry but doesn‘t work properly without JavaScript enabled. Please enable it to continue(vue was assigned to but)

下一篇:ajax - 终结篇jsonp,防抖节流(ajax json请求)

  • vivox70怎么设置通话自动录音(vivox70怎么设置动态壁纸)

    vivox70怎么设置通话自动录音(vivox70怎么设置动态壁纸)

  • oppo手机短信拦截在哪里设置(OPPO手机短信拦截在哪里看)

    oppo手机短信拦截在哪里设置(OPPO手机短信拦截在哪里看)

  • 腾讯课堂怎么改课堂中自己的名字(腾讯课堂怎么改名字电脑版)

    腾讯课堂怎么改课堂中自己的名字(腾讯课堂怎么改名字电脑版)

  • 钉钉怎么放大老师的屏幕(钉钉怎么放大老师批改作业)

    钉钉怎么放大老师的屏幕(钉钉怎么放大老师批改作业)

  • 华为Nova5手机怎么下载两个微信(华为nova5手机怎么开空调)

    华为Nova5手机怎么下载两个微信(华为nova5手机怎么开空调)

  • 抖音被拉黑了还能搜索到对方抖音吗(抖音被拉黑了还能看到对方的直播吗)

    抖音被拉黑了还能搜索到对方抖音吗(抖音被拉黑了还能看到对方的直播吗)

  • 抖音怎么设置不看某个人的视频(抖音怎么设置不推荐通讯录好友)

    抖音怎么设置不看某个人的视频(抖音怎么设置不推荐通讯录好友)

  • 抖音不绑定手机号有什么影响(抖音不绑定手机可以吗)

    抖音不绑定手机号有什么影响(抖音不绑定手机可以吗)

  • 删了对方,对方的备注会变吗(删了对方对方还能收到转账吗)

    删了对方,对方的备注会变吗(删了对方对方还能收到转账吗)

  • 录屏时间最久多少(录屏时间最久多少分钟)

    录屏时间最久多少(录屏时间最久多少分钟)

  • 华为mate30pro是什么手机(mate30pro主打什么)

    华为mate30pro是什么手机(mate30pro主打什么)

  • qq等级加速包是啥(qq等级加速包有什么好处)

    qq等级加速包是啥(qq等级加速包有什么好处)

  • 域名系统dns的功能(域名dns的功能)

    域名系统dns的功能(域名dns的功能)

  • vsco是什么软件(vsco是啥软件)

    vsco是什么软件(vsco是啥软件)

  • 怎样在手机上看电视节目(怎样在手机上看自己的车停哪了)

    怎样在手机上看电视节目(怎样在手机上看自己的车停哪了)

  • 手机直推什么意思(手机直推怎么推)

    手机直推什么意思(手机直推怎么推)

  • iphone11pro怎么显示农历(iphone11pro怎么显示网速)

    iphone11pro怎么显示农历(iphone11pro怎么显示网速)

  • 台式机如何加装显卡(台式机如何加装高清接口)

    台式机如何加装显卡(台式机如何加装高清接口)

  • 苹果无线耳机坏了能修吗(苹果无线耳机怎么配对)

    苹果无线耳机坏了能修吗(苹果无线耳机怎么配对)

  • 群昵称怎么变色(如何让群昵称变成彩色)

    群昵称怎么变色(如何让群昵称变成彩色)

  • 红米note8可以升级miui11吗(红米note8可以升级米柚13吗)

    红米note8可以升级miui11吗(红米note8可以升级米柚13吗)

  • iphonexr反向充电在哪开(苹果xr手机反向充电怎么使用)

    iphonexr反向充电在哪开(苹果xr手机反向充电怎么使用)

  • wps怎么自动编序号(wps怎么能自动编号)

    wps怎么自动编序号(wps怎么能自动编号)

  • airpods刻字了还能退吗(airpods刻字了还能换吗)

    airpods刻字了还能退吗(airpods刻字了还能换吗)

  • 小度怎么安装腾讯视频(小度怎么安装腾讯会议教程)

    小度怎么安装腾讯视频(小度怎么安装腾讯会议教程)

  • 笔记本内存条怎么插(笔记本内存条怎么看电压)

    笔记本内存条怎么插(笔记本内存条怎么看电压)

  • 电脑f5键是什么作用(电脑键盘f5是啥意思)

    电脑f5键是什么作用(电脑键盘f5是啥意思)

  • 苹果xs来电声音越来越小(苹果xs来电声音设置)

    苹果xs来电声音越来越小(苹果xs来电声音设置)

  • python Timer定时器如何使用?

    python Timer定时器如何使用?

  • 销项税额期末余额
  • 非居民个人利息所得个税税率
  • 广告行业的税负率
  • 纳税人离线开票时间的文件
  • 劳务费增值税税率13%
  • 无形资产开发阶段
  • 银行承兑汇票到期日期怎么算
  • 贴现利息支付方式
  • 公司租赁的车辆发生的费用都可以报销吗?
  • 计提的工会经费怎么做账
  • 增值税金内部结算方式
  • 保证金抵扣货款合同
  • 公司迁移注册地税务问题
  • 利息收入汇算清缴
  • 机票行业一定要开发票吗?
  • 小规模增值税纳税申报表
  • 一般纳税人购进货物用于免征增值税项目
  • 防伪税控维护费会计分录
  • 进项税额转出年末要结转吗
  • 员工离职违约金怎么算
  • 营业外支出调减应该填在纳税调整项目明细表哪一项
  • 委托加工物资增值税怎么计算
  • 月末增值税进项和销项怎么结转
  • 支付个人利息没有取得发票
  • 以前年度损益调整
  • 税控专用设备全称是什么
  • 一般纳税人转为小规模纳税人后还可以转为一般纳税人吗
  • 工会经费使用具体办法
  • 完税凭证遗失后还能用吗
  • 查账补交以前年度印花税分录
  • PHP:eregi_replace()的用法_Regex正则函数
  • 农产品核定扣除和计算抵扣的区别
  • 迷迭香怎么养殖方法
  • shell脚本攻略第三版pdf
  • php删除数据
  • express框架使用
  • 产品工人工资属于制造费用吗
  • php swoole框架
  • javaweb知识点汇总
  • ctu指令
  • php怎么写数据库
  • 【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本
  • 工商罚款怎么入账
  • 汇兑损益计算器
  • 公积金会计分录怎么处理2019
  • 购买需要安装的设备计入什么科目
  • 四舍五入 vb
  • fortify 安装
  • 汽车保险费计入应付账款还是其他应付款
  • 年度亏损计提所得税吗
  • 经营项目里没有纹身可以纹身吗
  • 把公司土地转让合法吗
  • 制造费用的明细账应当按照什么设置
  • 本年利润的会计科目
  • 物流托运不给发货
  • 销项负数发票是红字发票吗
  • 会计往来账如何记账
  • 应收账款周转率计算公式
  • 私营公司无形资产怎么算
  • 明细账怎么弄
  • sql server 2000安装好打开不显示名称和服务原因
  • mysqlbinlog -vvv
  • windows自带截图保存在哪里
  • mac chrome浏览器插件
  • ubuntu15.04系统怎么使用卸载命令卸载软件?
  • 忘记mysql root密码的解决方法
  • windows安装服务器
  • win7系统如何删除隐藏文件
  • win10不能玩qq堂没反应
  • unsupportedclassversion
  • android view动画
  • 纵向导航页面
  • jquery与ajax获取特殊字符实例详解
  • python文件a
  • javascript中的原型和原型链
  • 社保申报后多久缴费
  • 深圳国税电子税务局官网
  • 税率的计算器在线计算
  • 问一下医院
  • 纳税服务存在的不足之处
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设