chrome插件开发实例05-拦截页面请求

news2024/11/25 14:22:53

目录

功能

演示

 源代码下载

manifest.json

devtools.html

devtools.js

background.js


功能

拦截任意打开页面的请求信息,包括:URL,参数,请求方式method, 返回status,返回体大小,返回原始内容

演示

 

 源代码下载

https://download.csdn.net/download/wodeyijia911/88180871

manifest.json

{
  "name": "chromepulgin",
  "version": "1.0.0",
  "minimum_chrome_version": "10.0",
  "description": "chrome devtools",
  "manifest_version": 2,
  // devtools页面入口,注意只能指向一个HTML文件,不能是JS文件
  "devtools_page": "devtools.html",
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "css": [],
      "js": ["scripts/axios.min.js","scripts/vue.min.js", "content_scripts.js"]
    }
  ],
  "background": {
    "scripts": [
      "scripts/background.js" //指定了scripts属性,则Chrome会在扩展启动时自动创建一个包含所有指定脚本的页面
    ],
    "persistent": true //定义了常驻后台的方式——当其值为true时,表示扩展将一直在后台运行,无论其是否正在工作
  },
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "storage",
    "tabs",
    "http://*/*",
    "https://*/*",
    "contextMenus",
    "chrome://favicon/"
  ],
  "content_security_policy": "style-src 'self' 'unsafe-inline' https://unpkg.com;script-src 'self' 'unsafe-eval' https://cdn.bootcss.com;object-src 'self' ;",
  "icons": {
  },
  "browser_action": {
//    "default_icon": "img/chrome01.png",
//    "default_popup": "popup.html",
//    "default_title": "magic"
  }
}

devtools.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="js/devtools.js"></script>

</body>
</html>

devtools.js

ps: devtools.js 类似popup.js, 可以直接调用background.js中的函数

chrome.webRequest.*API 均不能获取请求返回的内容。

const CD = chrome.devtools;
// Chrome DevTools Extension中不能使用console.log
const log = (...params) => CD.inspectedWindow.eval(`console.log(...${JSON.stringify(params)})`);

log('devtools.js log........');
    chrome.devtools.network.onRequestFinished.addListener(
        async (...args) => {
            try {
                const [{
                    // 请求的类型,查询参数,以及url
                    request: { method, queryString, url },
                    response: { bodySize, status },

                    // 该方法可用于获取响应体
                    getContent,
                }] = args;

                log(method, queryString, url);
                log(bodySize, status);

                // 将callback转为await promise
                // warn: content在getContent回调函数中,而不是getContent的返回值
                const content = await new Promise((res, rej) => getContent(res));
                log('response=   '+content);
                // 调用background.js中的函数
                var bg = chrome.extension.getBackgroundPage();
                bg.sendRequest(url);

            } catch (err) {
                log(err.stack || err.toString());
            }
        });

background.js



document.scripts[0].src="axios.min.js"
function addScript(url){
    var script = document.createElement('script');
    script.setAttribute('type','text/javascript');
    script.setAttribute('src',url);
    document.getElementsByTagName('head')[0].appendChild(script);
}
addScript("scripts/axios.min.js")
function sendRequest(args){
    console.log("bg sendRequest");
    this.axios({
        method: args.method,
        url: args.url,
        data: args.data,
        headers:args.headers
    }).then(resp => {  //请求成功
        console.log("sendRequest:"+resp);
    }).catch(error => { //请求失败
        console.log(error);
    }).then(() => { //() => {} 相当于 function(){}
        console.log("不管怎么样都要执行");  //必须执行的代码,相当于finnally
    })
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工程实践】解决Synonyms无法下载词向量文件

1.前言 使用EDA(Easy Data Augmentation)做数据增强时&#xff0c;需要借助Synonyms库&#xff0c;完成同义词的提取。 Synonyms 是一个中文近义词工具包&#xff0c;它可用于如文本对齐、推荐算法、相似度计算、语义偏移、关键字提取、概念提取、自动摘要、搜索引擎等很多自然…

FFmpeg常见命令行(三):FFmpeg转码

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个&#xff0c; 对应的要学习的内容是&#xff1a;如何使…

移动硬盘不显示盘符简单处理方法

通常情况下&#xff0c;将移动硬盘连接到电脑后会被赋予一个特定的盘符&#xff0c;以便用户可以访问和操作其中的文件和文件夹。然而&#xff0c;如果移动硬盘不显示盘符&#xff0c;意味着操作系统无法根据该硬盘的文件系统和存储信息识别出其所对应的盘符&#xff0c;这将导…

[LeetCode - Python]167.两数之和 II (Medium);125. 验证回文串(Easy)

1.题目&#xff1a; 167.两数之和 II &#xff08;Medium&#xff09; 1.代码&#xff1a; class Solution:def twoSum(self, numbers: List[int], target: int) -> List[int]:#由于数组是已按非递减顺序排列&#xff0c;因此可以对撞双指针&#xff1b;le , ri 0 , len…

JWT的使用

文章目录 前言一、在yml文件中配置参数二、创建JwtUtil.java三、创建JwtProperties.java四、创建JwtClaimsConstant.java五、创建JwtTokenAdminInterceptor.java六、注册到WebMvcConfiguration1.4.3 ThreadLocal 前言 一、在yml文件中配置参数 sky:jwt:# 设置jwt签名加密时使…

骨传导耳机是怎么工作的?骨传导耳机是智商税产品吗?

骨传导耳机是怎么工作的&#xff1f;骨传导耳机是智商税产品吗&#xff1f; 骨传导耳机是怎么工作的&#xff1f; 骨传导耳机的传声方式跟传统耳机完全不同&#xff0c;骨传导耳机就是利用骨传导的原理是直接将人体骨结构作为传声介质&#xff0c;通过颅骨来进行声音传播的&am…

物联网与5G引领智慧城市时代的到来

智慧城市需要依赖于多种技术&#xff0c;这些技术的应用将城市转变为高效、智能、可持续发展的现代化城市。智慧城市是基于信息技术、物联网和大数据等先进技术的融合&#xff0c;旨在提升城市的运行效率、资源利用效率和居民生活质量。以下是智慧城市需要依赖的主要技术&#…

GD32F103VE深度睡眠与唤醒

GD32F103VE深度睡眠与唤醒&#xff0c;执行WFI指令或执行1次WFE指令&#xff0c;命令CPU进入深度睡眠模式。 电源管理单元有3种省电模式:睡眠模式&#xff0c;深度睡眠模式和待机模式&#xff1b; 进入深度睡眠的步骤如下&#xff1a; 1,配置SLEEPDEEP1 2,配置STBMOD0 3,执行W…

[K8S:命令执行:权限异常:解决篇]:通过更新kubeconfig配置相关信息

文章目录 一&#xff1a;场景复现&#xff1a;1.1&#xff1a;关键信息&#xff1a;1.2&#xff1a;全异常日志输出&#xff1a; 二&#xff1a;解决流程&#xff1a;2.1&#xff1a;更新 kubeconfig&#xff1a;2.1.1&#xff1a;执行命令&#xff1a; 2.2&#xff1a;再次执行…

Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

一对一音视频通话使用场景 一对一音视频通话都需要稳定、清晰和流畅&#xff0c;以确保良好的用户体验&#xff0c;常用的使用场景如下&#xff1a; 社交应用&#xff1a;社交应用是一种常见的使用场景&#xff0c;用户可以通过音视频通话进行面对面的交流&#xff1b;在线教…

Android google admob Timeout for show call succeed 问题解决

项目场景&#xff1a; 项目中需要接入 google admob sdk 实现广告商业化 问题描述 在接入Institial ad 时&#xff0c;onAdLoaded 成功回调&#xff0c;但是onAdFailedToShowFullScreenContent 也回调了错误信息 “Timeout for show call succeed.” InterstitialAd.load(act…

算法刷题之路

刷题历程 - - - 基本数据结构 - - -数组、字符串、堆、栈、队列、链表739.每日温度&#xff08;栈&#xff09;155. 最小栈20. 有效的括号581.最短无序连续数组169. 多数元素&#xff08;数组&#xff09;136.只出现一次的数字128.最长连续序列560.和为k的子数组&#xff08;组…

yolo使用说明

yolo-v5代码 一、环境准备 yolo-v5更像是一个工程 算法和v4差不多&#xff0c;只是细节有所不同 拉取代码 环境要求 因为v6用到了torch1.6中的混合精度 二、数据准备 训练使用的是coco数据集 coco数据集很大&#xff0c;训练起来费时间&#xff0c;可以直接用自己数据集来做…

三、axios+vue

Axios 导入&#xff1a; <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 基础语法&#xff1a; axios.get(?keyvalue&key2value2).then(function(response){},function(err){} axios.post(地址&#xff0c;{key:value,key2…

IDEA常用插件介绍

1.CodeGlance&#xff08;CodeGlance Pro&#xff09; 安装后&#xff0c;重新启动编译器即可。 CodeGlance是一款非常好用的代码地图插件&#xff0c;可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区&#xff0c;可以快速定位代码的同时&#xff0c;并且提供放大镜功能…

DARPA TC-engagement5数据集解析为json格式输出到本地

关于这个数据集的一些基本信息就不赘述了&#xff0c;参考我之前的博客。DARPA TC-engagement5数据集官方工具可视化 官方给的工具是将解析的数据存到elasticsearch的&#xff0c;但是数据集的解压增长率非常恐怖&#xff0c;对空间要求很高。因此针对这个问题&#xff0c;我对…

win10配置rocketmq

下载地址&#xff1a;下载 | RocketMQ ,版本根据自己情况定&#xff0c;我选用的是4.7.* 1、下载后解压。D:\rocketmq-all-4.7.0-bin-release 2、需要注意一下jdk安装目录的目录名不能有空格&#xff0c;否则会报错找不到JAVA 3、环境变量新增ROCKEMQ_THOMED:\rocketmq-all-4…

MySQL语句判断数据库数据重复情况,新增、删除、不变。

判断 7月8月两个月数据对比情况&#xff0c;新增、删除(离职)、重复。 根据manager_name,gg_name,employer,department,historical_office判断出是否重复数据 -- ●- 新增或离职 -- ●- 创建临时表CREATE TABLE temp_table (SELECT id,manager_name,gg_name,employer,departme…

4用opencv玩转图像2

opencv绘制文字和几何图形 黑色底图 显示是一张黑色图片 使用opencv画圆形 #画一个圆 cv2.circle(imgblack_img,center(400,400),radius100,color(0,0,255),thickness10) 画实心圆 只需要把thickness-1。 cv2.circle(imgblack_img,center(500,600),radius50,color(0,0,255),t…

项目优化后续 ,手撸一个精简版VUE项目框架!

之前说过项目之前用的vben框架&#xff0c;在优化完性能后打包效果由原来的纯代码96M变成了56M&#xff0c;后续来啦&#xff0c;通过更换框架&#xff0c;代码压缩到了36M撒花~ 现在就来详细说说是怎么手撸一个框架的&#xff01; 方案&#xff1a; 搭建一套 vite vue3 a…