谷歌扩展开发v3版本,自动请求接口

news2024/12/23 8:44:41
  • 背景:pc端项目要是1个小时不动不请求,token会过期,写个插件每隔一段时间自动取请求一个接口,让token不过期
  • 过程:在刚开始写的时候 网上大部分是 谷歌扩展开发v2版本的做法,先是把官方文档看了一下,最重要的是 manifest.json 里面的 "manifest_version": 3,"version": "2.6","name": "自动刷新2",这三个key,先要有一个初步的了解,大概得意思是从页面或者扩展上获取值,输入值,把值在popup.js contentScript.js background.js 里面传来传去,达到想要的传染效果,请求效果,改变页面的效果。v3用的请求方式是feach,v2用的xhr。看的时候一脸懵逼,可以先看看文档,然后看简单的案例,再去动手操作,比较合适。先要了解这些属性和通信方式很重要。看到boss招聘需求里有个谷歌扩展的要求,我就学了一下简单的使用。
  • 效果:每隔3秒钟自动请求接口一次,让token不过期
  • 使用:打开谷歌浏览器→设置→扩展程序→开启开发者模式→‘加载已解压的扩展程序’
  • 扩展目录
    在这里插入图片描述

manifest.json

{
    "manifest_version": 3,
    "version": "2.6",
    "name": "自动刷新2",
    "action": {
        "default_popup": "popup.html"
    },
    "background": {
        "service_worker": "background.js",
        "type": "module"
    },

    "host_permissions": [
        "https://*/*"
    ],
    "permissions": [
        "cookies",
        "tabs",
        "storage",
        "activeTab",
        "https://*/*"
    ],
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["contentScript.js"]
    }]
}

background.js

// 当插件安装后执行一次
chrome.runtime.onInstalled.addListener(() => {
    console.log('Extension installed');
});

// 监听页面更新事件
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.status === 'complete') {
        // 向当前页面发送消息
        chrome.tabs.sendMessage(tabId, {
            action: 'getToken',
            requestUrl: 'https://www.baidu.com/api' //  自动请求的接口,尽量不要带参数,仅仅是请求一下保持token不过期就行了
        });
    }
});

// 监听来自content script的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.action === 'sendToken') {
        function autoRequest() {
            // 获取到token后发送GET请求
            const url = request.requestUrl
            const headers = { Authorization: `Bearer ${request.token}` };
            fetch(url, { method: 'GET', headers })
                .then(response => response.json())
                .then(data => {
                    console.log(data);
                    // 在这里处理获取到的数据
                })
                .catch(error => {
                    console.log(request);
                });
        };
        autoRequest();

    }
});

contentScript.js

let timer;
let flag = false; // 防止重复请求的开关

// 监听来自background的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.action === 'getToken') {
        function requestUrl() {
            if (timer) {
                timer = null
                clearTimeout(timer)
            }
            // 在这里获取当前页面的token
            const token = getTokenFromPage();
            if (!token) return;
            if (flag) return;
            flag = true;
            // 向background发送token
            timer = setTimeout(() => {
                flag = false
                chrome.runtime.sendMessage({ action: 'sendToken', token, requestUrl: request.requestUrl });
                requestUrl()
            }, 3000)
        };
        requestUrl()
    }
});

function getTokenFromPage() {
    // 在这里实现获取当前页面的token的逻辑
    // 返回获取到的token值
    let token = localStorage.getItem('token')
    return token || ""
}

popup.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

    </style>
</head>

<body>
    <div class="box">
        <button id="rBgInfo">按钮</button>
    </div>
</body>

</html>

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

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

相关文章

计算机论文写作规范

什么是顶会 顶级会议一般是,在业界(本领域本方向)受到广泛的承认,影响力较大的会议。一方面一般顶级专家、学者都倾向于将paper投到这些 会议;另一方面这些会议的论文代表了该领域的目前很优秀、有重大意义的进展。"顶级会议"的投稿竞争压力一般都很大,属于在经典 p…

【k8s】Jenkins实现Java应用CI、CD实践 【二】【待写】

一、运行Jenkins流水线流程思路&#xff1a; 场景1&#xff1a;常规java应用&#xff0c;使用jenkins pipeline 交付到Kubernetes集群中1、准备好java代码、Dockerfile、 deploy. yaml资源清单文件CI阶段: 1、获取代码 2、漏洞扫描 3、检测漏洞扫描结果&#xff0c;如果正常则…

MySQL8.0卸载、安装和使用(一)

1、MySQL数据库的卸载 有小伙伴在学MySQL的时候总是出现各种问题&#xff0c;MySQL的安装都会出现许多问题&#xff0c;今天以MySQL8.0作为示范&#xff0c;需要注意的问题和正确的使用方式。因为MySQL是系统软件&#xff0c;相对复杂&#xff0c;因此先讲卸载。 步骤一&#x…

病毒丨文件夹病毒

作者丨黑蛋 一、基本信息 文件名称 880753802c3e6f4b5269062d4e76200c66e3a71e2118702e24d2b32c19dddfd2 文件类型(Magic) PE32 executable (GUI) Intel 80386, for MS Windows 文件大小 479.50KB SHA256 880753802c3e6f4b5269062d4e76200c66e3a71e2118702e24d2b32c19dddfd2 …

青龙面板使用教程,以及安装

1. 青龙面板使用教程&#xff0c;以及安装 首先青龙面板是在docker里面的&#xff0c;我们要安装一个docker 我这里只有debian 11 安装的教程 如何在debian11上安装docker - 知乎 这个文章不错了&#xff0c;按命令执行就好了&#xff0c;其他操作系统的。去网上搜索安…

Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题

文章目录 环境目的原因问题解决方法 环境 Unity : 国际版2020.3.37f1 Pipeline : BRP Packages: Post Processing 3.0.3 目的 BRP 虽然是 官方放弃更新的 渲染管线&#xff0c;但是有些项目仍然会使用到&#xff0c;有一些踩过的坑&#xff0c;该记录的还是记录一下&#xff…

Python爬虫入门 - 通过茅台脚本讲些爬虫知识,应用和价值

前言 前段时间抢茅台脚本非常火&#xff0c;它是 Python 脚本&#xff0c;加上刚好最近在学习 Python&#xff0c;我们准备通过这个脚本&#xff0c;来加深学习 Python。 抢茅台的脚本其实属于爬虫脚本的一类&#xff0c;它实现了模拟登陆&#xff0c;模拟访问并抓取数据。于…

chatgpt api调用方法指南

文章目录 python调用chatgpt api的方法获取api可以调用的模型各种任务代码示例文本分类任务文本生成&#xff08;补全&#xff09;任务多轮对话任务 机器翻译任务文本摘要任务信息抽取任务 本文主要介绍使用python调用chatgpt api的方法&#xff0c;并提供一些任务的代码样例&a…

2023年认证杯C题超详细思路配有实现代码

2023年认证杯初步解题思路 后续会更新思路对应的实现代码 问题一思路 数据预处理&#xff1a;首先&#xff0c;根据描述&#xff0c;你已经有了心电波形的功率谱密度数据。你可以将频率范围从0 Hz到180 Hz分成361个频率间隔为0.5 Hz的数据点。确保数据格式正确&#xff0c;并…

chatgpt赋能Python-python2虚拟环境

Python2虚拟环境——加强你的编程能力 Python是一种广泛应用于Web开发&#xff0c;数据科学和机器学习等领域的编程语言。但是&#xff0c;由于不同的应用程序需要使用不同的Python库和版本&#xff0c;因此在不同的项目之间切换时可能会出现问题。 Python虚拟环境可以帮助您解…

八股总结(五)java基础、集合、并发、JVM

文章目录 接口、类与继承java中创建对象有哪几种方式&#xff1f; 和equal区别是什么&#xff1f;hashCode()为什么重写equals方法必须重写hashcode方法?String为什么设计成不可变的&#xff1f;String&#xff0c;StringBuffer&#xff0c;StringBuilder的区别是什么&#xf…

2023年改版第七版PMBOK后的PMP到底考什么?出题依据是什么?

2023年改版第七版PMBOK后的PMP到底考什么&#xff1f;出题依据是什么&#xff1f; 自从PMBOK&#xff08;Project Management Body of Knowledge&#xff09;第一版于1987年发布以来&#xff0c;它已成为项目管理领域的标准参考。PMBOK指南是Project Management Institute&…

Python画图设置坐标轴数字的千位分隔符

目录 导入必要的库创建图形并设置坐标轴设置坐标轴的千位分隔符完整代码效果图 当使用Python进行绘图时&#xff0c;可以使用 Matplotlib库来设置坐标轴上的数字的千位分隔符。下面是一个完整的教程&#xff0c;其中包含代码示例。 导入必要的库 在开始编写代码之前&#xff…

Java学习平台系统的设计与实现

背景 本次设计任务是要设计一个学习平台&#xff0c;通过这个系统能够满足学习信息的管理及学生和教师的学习管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;课程信息管理&#xff0c;类型管理&#xff0c;作业信…

使用sqoop从Hive导出数据到MySQL

1、启动hadoop&#xff1a;start-all.sh。 2、启动mysql&#xff1a;support-files/mysql.server start。 3、启动hive&#xff1a;hive。 4、在hive中创建表。 &#xff08;学生信息&#xff1a;学号xh&#xff0c;姓名xm&#xff09;xsxx&#xff1a; create table bigda…

streamlit魔法使用

正常在学习一个新框架之前&#xff0c; 肯定要先调研下这个框架究竟能做些什么事吧&#xff1f; 但对于 streamlit 来说&#xff0c;请你相信我&#xff0c;这是一个你可以无脑去学习的框架&#xff0c;我之所以这么说&#xff0c;是因为我相信终有一天&#xff0c;你一定能用…

11. Mysql执行原理之索引合并详解

MySQL性能调优 1. Intersection合并1.1 情况一&#xff1a;等值匹配1.2 情况二&#xff1a;主键列可以是范围匹配 2. Union合并2.1 情况一&#xff1a;等值匹配2.2 情况二&#xff1a;主键列可以是范围匹配2.3 情况三&#xff1a;使用Intersection索引合并的搜索条件 3. Sort-U…

云厂商纷纷降价开启新一轮价格大战,行业竞争加剧未来何从?

5月16日晚间&#xff0c;腾讯云和移动云两大云服务商相继宣布对旗下多款核心产品进行降价。其中&#xff0c;腾讯云降价幅度最高达40%&#xff0c;移动云部分产品直降60%。 而就在20天前4月26日阿里云2023合作伙伴大会上&#xff0c;阿里巴巴CEO张勇率先宣布启动“史上最大规模…

服务(第二十五篇)redis的优化和持久化

持久化的功能&#xff1a;Redis是内存数据库&#xff0c;数据都是存储在内存中&#xff0c;为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失&#xff0c;需要定期将Redis中的数据以某种形式&#xff08;数据或命令&#xff09;从内存保存到硬盘&#xff1b;当下…

win7虚拟机无法安装VMwaretools的处理办法(亲测有效!)

最近在学习中用到要安装win7系统&#xff0c;于是我在虚拟机里装了win7系统&#xff0c;但是却发现无法安装VMware tools&#xff0c;最后经多方查证&#xff0c;以下方法可解决&#xff01; 这里提示需要将原始win7升级到win7 SP1版本&#xff0c;可在控制面版——系统和安全…