Chrome 插件各模块使用 Fetch 进行接口请求

Chrome 插件各模块使用 Fetch 进行接口请求

常规网页可以使用 fetch()XMLHttpRequest API 从远程服务器发送和接收数据,但受到同源政策的限制。

内容脚本会代表已注入内容脚本的网页源发起请求,因此内容脚本也受同源政策的约束,插件的来源不受限制。

在插件 Service Worker 或前台标签页中执行的脚本可以与其源之外的远程服务器通信,前提是该插件请求跨源权限。

一、XMLHttpRequestFetch

fetch() 是专为 Service Worker 创建的,遵循远离同步操作的更广泛的网络趋势。Service Worker 之外的扩展支持 XMLHttpRequest() API,调用它会触发扩展 Service Worker 的提取处理程序

Service Worker 模块不支持 XMLHttpRequest,因此在新的插件中进行接口网络请求需使用 Fetch

const response = await fetch('https://www.example.com/greeting.json'')
console.log(response.statusText);

二、Fetch 请求

1. 请求插件内容模块

每个正在运行的插件都存在于各自独立的安全源中。该插件无需请求额外的权限,即可调用 fetch() 来获取安装范围内的资源

如果某个插件在 config_resources/ 文件夹中包含一个名为 config.jsonJSON 配置文件,则该插件可以检索该文件的内容

const response = await fetch('/config_resources/config.json');
const jsonData = await response.json();

2. 跨源请求

需在 manifest.json 中添加 host_permissions 字段

{
  "name": "My extension",
  "host_permissions": [
    "https://www.douban.com/"
  ],
}

3. content_scripts 中进行网络请求

  1. manifest.json 文件配置
{
  "content_scripts": [
    {
      "matches": ["https://movie.douban.com/*"],
      "css": ["content/index.css"],
      "js": ["content/jquery.js", "content/index.js"]
    }
  ],
  "host_permissions": [
    "https://movie.douban.com/*"
  ],
}
  1. content/index.js 进行数据请求
const response = await fetch("https://movie.douban.com/j/tv/recommend_groups")
if (!response.ok) {
  throw new Error('Network response was not ok')
}
const allData = await response.json()
console.log('content index allData', allData)
  1. 日志输出

在这里插入图片描述

4. service_worker 中进行网络请求

  1. manifest.json 文件配置
{
  "host_permissions": [
    "https://movie.douban.com/*"
  ],
}
  1. service_worker.js 进行数据请求
const response = await fetch("https://movie.douban.com/j/tv/recommend_groups")
if (!response.ok) {
  throw new Error('Network response was not ok')
}
const allData = await response.json()
console.log('service worker allData', allData)
  1. 日志输出

在这里插入图片描述

5. Action 中进行网络请求

  1. manifest.json 文件配置
{
  "host_permissions": [
    "https://movie.douban.com/*"
  ],
}
  1. index.js 进行数据请求
const response = await fetch("https://movie.douban.com/j/tv/recommend_groups")
if (!response.ok) {
  throw new Error('Network response was not ok')
}
const allData = await response.json()
console.log('Action allData', allData)
  1. 日志输出

在这里插入图片描述

总结

  1. Chrome 插件中的网络请求和普通 web 是一样的,只不过从常用的 AJAX 换成了 Fetch
  2. 进行跨域请求的时候一定要配置 manifest.json 文件
  3. 一般请求都需要和 cookies 进行配合,关于 cookies API 可以查看 【Chrome 浏览器插件 cookies API 解析

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI+软件工程:10倍提效!用ChatGPT编写系统功能文档

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 用ChatGPT生成系统功能文档 我们以线上商城系统为例&#…

阿里云ESC云服务器搭建手册

1.开通阿里云ESC云服务 1.1 打开阿里云官网 https://www.aliyun.com/ 自行注册登录 1.2 选择产品 1.3 点击免费试用 新用户可以免费试用3个月 1.4 选择服务器配置 1.5 选择操作系统 创建服务器实例的时候会自动帮我们创建一个操作系统 1.6 点击立即试用 1.7 创建成功后点击前往…

2010年之前电脑ubuntu安装nvidia驱动黑屏处理

装好驱动 仿真fps直接到60Hz 陈旧设备 都是非常老旧的电脑,没钱换新电脑,就这么穷…… 电脑详细配置: 冲动 想装显卡驱动提升一下性能,结果……黑了 黑习惯了也无所谓,几分钟就能解决,关键还是太穷&…

金融投贷通(金融投资+贷款通)项目准备

金融投贷通(金融投资贷款通)项目准备 专业术语投资专业术语本息专业术语还款专业术语项目介绍三个子系统技术架构核心流程发布借款标投资业务 项目实施测试流程测试步骤 专业术语 投资专业术语 案例:张三借给李四5W,约定期满1年后…

springboot项目配置属性jasypt加密明文

springboot项目配置属性jasypt加密明文 在pom.xml文件引入依赖包 <!-- jasypt加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version&g…

52个AIGC视频生成算法模型介绍

基于Diffusion模型的AIGC生成算法日益火热&#xff0c;其中文生图&#xff0c;图生图等图像生成技术普遍成熟&#xff0c;很多算法从业者开始从事视频生成算法的研究和开发&#xff0c;原因是视频生成领域相对空白。 AIGC视频算法发展现状 从2023年开始&#xff0c;AIGC视频的新…

python判断当前日期是全年哪一天

设计者&#xff1a;ISDF 版本&#xff1a;v3..0 日期&#xff1a;04/01/2019设计者&#xff1a;ISDF 版本&#xff1a;v4..0 日期&#xff1a;03/27/2024 import datetime#闰年判断函数 def ys_leep_year(year):ys_leep Falseif (year % 400 0) or ((year % 4 0) and (year …

Window10无法收到Windows11更新推送的问题

参考文章&#xff1a;如何在更改设备硬件后检查设备是否满足 Windows 11 系统要求 问题描述&#xff1a; 已经使用 PC Health Check 工具检查&#xff0c;确认电脑可以升级 Windows 11&#xff0c;但是在 Windows 更新界面无法收到 Windows 11 更新的提示。 解决方案 按 Win…

鸿蒙OS封装【axios 网络请求】(类似Android的Okhttp3)

Okhttp.ets /*** 网络请求*/ import axios from ohos/axios import httpConstants from ../net/HttpConstants import errorCode from ../utils/errorCode import toast from ../utils/ToastUtils import router from ../utils/RouterUtils import SPUtils from ../utils/SPUt…

【环境配置】Ubuntu MySQL 8.0.28 安装并允许外部客户端连接

文章目录 MySQL 安装步骤配置 MySQL Server 允许外部连接 MySQL 安装步骤 步骤一&#xff1a;在 MySQL 官网找到 apt 仓库&#xff0c;下载最新的仓库 点击 Download&#xff1a; 输入如下命令&#xff1a; sudo wget -c https://dev.mysql.com/get/mysql-apt-config_0.8…

Unity 打包真机脚本丢失的问题

记录Bug Bug详情分析解决方案附录 Bug详情 项目中导入了UI Particle的Package,用于处理特效层级 unity 运行效果正常&#xff0c;打包真机后运行时发现特效并没有正确显示&#xff0c;真机Log如下图 需要接入查看真机Log工具的点这里 查看图中Log发现对应的Prefab上挂载的脚本…

NFTScan 正式上线 Polygon zkEVM NFTScan 浏览器和 NFT API 数据服务

2024 年 3 月 26 号&#xff0c;NFTScan 团队正式对外发布了 Polygon zkEVM NFTScan 浏览器&#xff0c;将为 Polygon zkEVM 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商&#xff0c;Polygon zkEVM 是继 Bitc…

RabbitMQ 《简单消息》

package com.xzp.rabbitmq.simple; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.xzp.rabbitmq.util.ConnectionUtil; /** * "Hello World!" * 简单消息 * 消息发送者 - R - 发送消息&#xff08;生产者&#xff09; …

OpenCV 形态学

1 腐蚀 import cv2 import numpy as npimgcv2.imread(C:/Users/Administrator/Desktop/kai.jpg) kerneal cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#腐蚀 dstcv2.erode(img,kerneal,iterations2)cv2.imshow("img",np.hstack((img,dst))) cv2.waitKey(0) c…

pytorch简单的优化问题实战

目录 1. Himmelblau函数2. python画出函数图3. 梯度优化代码 1. Himmelblau函数 如下图&#xff1a; 从图中的碗一样的图中可以看出有4个极值点&#xff0c;那么经过优化后&#xff0c;会有4个结果。 4个点的结果见下图&#xff1a; 2. python画出函数图 3. 梯度优化代码 源…

「12」浏览器:以浏览器方式显示网址内容

「12」浏览器以浏览器方式显示网址内容 如果您想在直播间展示某一个网页的内容&#xff0c;那么您可以用OBS软件里的来源组件「浏览器」&#xff0c;它对特定来源网页地址页面进行抓取。如&#xff1a;数字时钟和圆形时钟。 操作方法 一、添加浏览器源 第1步 添加浏览器 在O…

【JavaScript】数组 ① ( JavaScript 数组概念 | 数组创建 | 使用 new 关键字创建数组 | 使用 数组字面量 创建数组 )

文章目录 一、JavaScript 数组概念二、数组创建1、使用 new 关键字创建数组2、使用 数组字面量 创建数组 一、JavaScript 数组概念 在 JavaScript 中 提供了一种 特殊的对象 " 数组 " , " 数组 " 对象 可以 在一个 " 连续的内存空间 " 中 &quo…

用 JavaScript 发起 HTTP 请求的几种方法

JavaScript 具有非常棒的模块和方法&#xff0c;可以用来建立可从服务器端资源发送或接收数据的 HTTP 请求。本文会带着大家一起看看在 JavaScript 中常用的建立 HTTP 请求的方式有哪些。 Ajax Ajax 是最常规的建立异步 HTTP 请求的方式。你可以使用 HTTP POST 方法来发送数据…

ElasticSearch、java的四大内置函数式接口、Stream流、parallelStream背后的技术、Optional类

第四周笔记 一、ElasticSearch 1.安装 apt-get install lrzsz adduser -m es 创建用户组&#xff1a; useradd *-m* xiaoming(用户名) *PS&#xff1a;追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码&#xff1a; 重新输入新的 UNIX 密码&…

【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法

目录 1 主要内容 节点故障网络拓扑变化示意 约束条件 目标函数 2 部分代码 3 结果一览 4 下载链接 1 主要内容 当前电力系统中微电网逐步成为发展的主力军&#xff0c;微网中包括分布式电源和负荷&#xff0c;单一的微电网是和外部电源进行连接&#xff0c;即保证用电的…