谷歌插件使用开发

news2024/9/19 10:55:41

谷歌插件

谷歌浏览器扩展程序:扩展是 Web 平台中使用的HTML、CSS、JavaScript、图像和其他文件的压缩包。可以修改用户浏览并与之交互中的web内容,它们还可以扩展和更改浏览器本身的行为。

开发核心

  • api 文档:link

插件主要是根据包内的manifest.json文件来进行解析加载的

{
  "icons": { // chrome://extensions/中展示的插件icon
    "16": "icon16.plasmo.9f44d99c.png",
    "32": "icon32.plasmo.83dbbbab.png",
    "48": "icon48.plasmo.a78c509e.png",
    "64": "icon64.plasmo.15206795.png",
    "128": "icon128.plasmo.c11f39af.png"
  },
  "manifest_version": 3, // 插件版本
  "action": { // 插件行为
    "default_icon": { // 插件启动后右上角icon
      "16": "icon16.plasmo.9f44d99c.png",
      "32": "icon32.plasmo.83dbbbab.png",
      "48": "icon48.plasmo.a78c509e.png",
      "64": "icon64.plasmo.15206795.png",
      "128": "icon128.plasmo.c11f39af.png"
    },
    "default_popup": "popup.html"// 插件启动后右上角icon点击弹出层
  },
  "version": "0.0.0",// 插件版本
  "author": "Plasmo Corp. <foss@plasmo.com>", // 作者
  "name": "DEV | With vue", // 名称
  "description": "A basic Plasmo extension.", // 描述
  "permissions": ["storage", "tabs"], // 权限
  "options_ui": { "page": "options.html", "open_in_tab": true }, // 选项
  "chrome_url_overrides": { "newtab": "newtab.html" }, // newtab重载
  "host_permissions": ["https://*/*"], // 权限适用路径
  "content_security_policy": { // 内容安全策略  制定了一些策略的加载
    "extension_pages": "script-src 'self' http://localhost;object-src 'self';"
  },
  "content_scripts": [ // 内容脚本 主要更改匹配页面
  {
    "matches": ["*://*.mozilla.org/*"],
    "js": ["borderify.js"]
  }
],
  "background": { "service_worker": "plasmo-default-background.686ba280.js" },// 浏览器后台一直运行的js
  "web_accessible_resources": [  // 与扩展程序一起打包的js资源
    { "matches": ["<all_urls>"], "resources": ["__plasmo_hmr_proxy__"] }
  ]
}

各脚本通信

  • 参考文档1:link
  • 参考文档2:link

不同的脚本对浏览器的能够调用的api也不一样。

  • content js 可以访问runtime extension等部分权限,可以访问dom,不可以跨域
  • popup js 可以访问大部分脚本除了devtools中,不可访问dom,可以直接跨域
  • background js 可以访问大部分脚本除了devtools中,不可访问dom,可以直接跨域

** 这三个主要脚本之间可以互相通信**

background 和 popup 通信

一个插件只有一个backgound js 但是每个开启一个tab都有一个popupjs

  • backgound
    传递消息: chrome.extension.getViews
  • popup
    传递消息:chrome.extension.getBackgroundPage

** background **

const pups = chrome.extension.getViews({type:'popup'})||[] ;// getViews
export function getPopupInfo(name){
    console.log('得到popup信息')
    console.log('name',name)
    console.log('popup',pups);// bg 对popup通信
}

** popup **

const bg = chrome.extension.getBackgroundPage()
function sendBg() {
  // popup 给 bg通信
  bg.getPopupInfo("测试")
}

popup 与content 通信

  • content
    1 发送消息 chrome.runtime.sendMessage
    2 接受消息 chrome.runtime.onMessage.addListener
  • popup
    1 发送消息 chrome.tabs.sendMessage 需 chrome.tabs.query获取到tabid
    2 接受消息 chrome.runtime.onMessage.addListener

content

// content 发送给popup
export const sendPopup = ()=>{
chrome.runtime.sendMessage({info:'我是content'},(msg)=>{
    console.log('答复',msg)
})
}

// content 接收popup
chrome.runtime.onMessage.addListener((req,sender,senRes)=>{
    console.log(req.info);
    senRes('content收到')
    
})

** popup **

// 接收content
function receivedContent() {
  chrome.runtime.onMessage.addListener((req, send, sendRes) => {
    console.log("收到", req.info)
    sendRes("popup已经收到")
  })
}

// 发送content
function sendContent() {
  chrome.tabs.query(
    {
      active: true,
      currentWindow: true
    },
    (tabs) => {
      chrome.tabs.sendMessage(tabs[0].id, { info: "popup消息" }, (msg) => {
        console.log("答复", msg)
      })
    }
  )

content 与background 通信

与content 与 popup通信类似

  • content
    1 发送消息 chrome.runtime.sendMessage
    2 接受消息 chrome.runtime.onMessage.addListener
  • backgound
    1 发送消息 chrome.tabs.sendMessage 需 chrome.tabs.query获取到tabid
    2 接受消息 chrome.runtime.onMessage.addListener

开发工具plasmo

  • 官网:link
  • git: link
  • 参考文档:link
  • plasmo模板:link

具体使用

基本命令

  • 创建项目
    npm create plasmo(基础)
    npm create plasmo – --with-vue(某个demo版本的)
  • 运行
    plasmo dev
  • 打包
    plasmo build

更改配置项

  • 更改生成后的manifest,需在package.json文件中的manifest选项配置
  "manifest": {
    "host_permissions": [
      "https://*/*"
    ],
    "permissions": [
      "tabs"
    ]
  }
  • 需要的js文件,在根目录建立content.ts, popup.vue,background.ts
    plasmo 会根据文件名自动引入build后的 配置文件中
    在这里插入图片描述
    其中contentjs 比较特殊 需要再content文件中在进行一个config的配置
export const config: PlasmoContentScript = {
  matches: ["https://www.plasmo.com/*"]
}
  • plasmo提供了一系列功能,如可以@plasmohq/storage进行存贮
import { Storage } from "@plasmohq/storage"
storage.get("listRef")
storage.set("listRef", listRef.value)

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

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

相关文章

mysql数据库主从同步

数据库版本 主&#xff1a;5.7.34 从&#xff1a;8.0.21 主数据库 修改mysql配置文件 my.ini&#xff08;windows&#xff09; 查看配置文件存在位置 -- 查看配置文件存在位置 show variables like %data%;修改内容 boo_db为同步的数据库名 server-id1log-binmysql-bin#目标…

手写一个单例模式,Demo,检测

手写一个单例模式&#xff0c;Demo&#xff0c;检测需求分析单例介绍一般情况DemoResult单例模式&#xff08;饿汉式—静态常量方式&#xff08;线程安全&#xff09;&#xff09;DemoResult懒汉式&#xff08;线程不安全&#xff09;DemoResult懒汉式&#xff08;加入锁机制&a…

K8s安装乐维5.0应用部署文档

乐维产品包具体打包为4个镜像包&#xff0c;分别为&#xff1a;mysql5.7.36.tar、zabbix_server.tar、itops_v1_4_x86_64.tar、bpm0.1.tar&#xff0c;对应的配置文件分别为&#xff1a;data.tar、conf.tar、nginx-v1.3.tar.gz、bpm12.zip。 K8s yaml文件具体打包为strogeclas…

[附源码]Python计算机毕业设计django学生学习评价与分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

数字逻辑·时序线路分析【触发器和时序线路分析方法】

课程目标 掌握触发器的特征表达式掌握触发器的激励表掌握触发器的状态表掌握时序线路分析方法 课程内容 D触发器 逻辑符号可以不画RD&#xff0c;SD&#xff0c;CP 上方&#xff1a;特征表达式&#xff1b;左下&#xff1a;激励表&#xff1b;右下&#xff1a;状态图 状态图…

list容器(20221117)

一、list容器 1、基本概念 功能&#xff1a;将数据进行链式存储 链表是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过指针实现的 链表由一系列的节点组成&#xff1b; 节点的组成&#xff1a;一个是存储数据元素的数据域&#xff0c;另一个是存…

初探softmax

什么是softmax Softmax,又称作归一化指数函数。主要用于分类任务&#xff0c;降多分类的结果以概率的形式展现 下图展示softmax计算方法 softmax本质上是归一化网络&#xff0c;目的是将多个标量映射为一个概率分布,其输出的每一个值范围在&#xff08;0&#xff0c;1&#x…

使用 Next.js、 Prisma 和 PostgreSQL 全栈开发视频网站

通过上一篇文章&#xff0c;我们对乔巴乐高海报平台的整体架构有了初步的了解。今天我们深入到编辑器部分&#xff0c;对其中的难点和实现细节进行分析。 这是目前生产的编辑器页面&#xff1a; 不难看出和市面上大部分低代码平台一样&#xff0c;由三部分组成&#xff1a;左侧…

10名IB学生获得满分,新加坡环球印度国际学校成为一匹黑马

近年来留学人数大幅度上升&#xff0c;其中新加坡因多元的文化环境、健全的教育制度&#xff0c;深受学生、家长青睐喜爱&#xff0c;新加坡国际学校也因此成为了香饽饽。 在每年的IB成绩放榜中&#xff0c;新加坡国际学校IB表现都非常亮眼。 除了我们熟悉的华中、德威、UWC等一…

宏记录器 Macro Recorder 2.0 注册版

记录鼠标和键盘操作以无限重播...... 不再执行相同的任务两次&#xff01; Macro Recorder 像录音机一样捕捉鼠标事件和击键&#xff0c;让您在计算机上自动执行繁琐的程序。 按记录。执行操作。 Macro Recorder 记录您的鼠标移动、鼠标点击和键盘输入。就像电脑的录音机一样。…

RabbitMQ第四个实操小案例——DirectExchange

文章目录RabbitMQ第四个实操小案例——DirectExchangeRabbitMQ第四个实操小案例——DirectExchange DirectExchange&#xff1a;这种交换机的模式跟前面的Fouout&#xff08;广播&#xff09;不太一样&#xff0c;DirectExchange 会将接收到的消息根据规则路由到指定的Queue&a…

(免费分享)基于springboot,vue毕业设计管理系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入011领取下载链接 开发工具IDEA ,数据库mysql5.7 &#xff0c;前后端分离 系统分学生、教师、管理员三个角色 1.学生截图 2.教师截图&#xff1a; 3.管理员截图&#xff1a; package com.cx.controller;import cn.…

C++实现哈希表。

目录 一. unordered_map unordered_set 和 map set的区别 二. 哈希 1. 哈希&#xff0c;哈希表&#xff0c;哈希函数。 2. 哈希冲突。 3. 哈希函数补充 3. 解决哈希冲突的两大方法&#xff1a;闭散列&#xff0c;开散列 闭散列 闭散列实现代码&#xff1a; 闭散列的删除…

MDF和DHF、DMR、DHR三者差异?注册与备案文件?

医疗器械研发、工艺、注册、质量人员时常会接触到DHF, DMR, DHR。这几个单词缩写不光是拼写非常相似&#xff0c;其含义也有许多相同之处&#xff0c;所以十分容易混淆。本文就来聊一聊这三者的区别和联系。 ISO13485:2016 证明符合法规要求 MDF-Medical Device File&#xf…

计算机毕业设计——税务缴纳信息管理

一.项目介绍 本项目包含管理员、普通用户两种角色 普通用户 可以浏览 首页、新闻信息、法律法规、税务政策、通知公告、留言板、个人中心、后台管理、在线咨询 普通用户进入后台管理可以修改密码、个人信息以及税务申报、填写留言 管理员用户登录可以操作 个人中心、用…

服务器证书是网络信息安全的基础

我们都清楚&#xff0c;互联网安全存在两大基本隐患&#xff0c;一是因为身份认证机制的缺位&#xff0c;使网络成为各种“钓鱼”诈骗行为的温床&#xff0c;导致互联网空间缺乏信任。互联网每时每刻都在传输数以亿万的信息&#xff0c;这些信息如果未经加密&#xff0c;就有可…

自动化测试如何区分用例集合及编写规范

目录 前言 业务量和复杂度增长现状是什么&#xff1f; 如何区分自动化测试的用例集合&#xff1f; 区分用例集合的过程要注意什么&#xff1f; 自动化测试用例选择 自动化测试用例编写 用例编写规范 结语 前言 前面的文章介绍过如何设计自动化测试case&#xff0c;有同…

一、翻越前端的三座大山——继承/原型链

文章目录原型专题前言什么是原型&#xff1f;实例和原型的关系什么是原型链&#xff1f;Object 和 Function 的继承关系原型运用例子&#xff1a;手写instanceof手写call&#xff0c;apply手写new六大继承方式原型链继承构造函数继承原型链 构造函数优化&#xff08;原型链 构…

mysql 中的锁

文章目录锁的分类锁粒度InnoDB 中的表锁InnoDB 中的行锁锁的分类 共享锁&#xff08;Shared Locks&#xff09; // 行共享锁 // 获取到当前记录的S锁&#xff08;共享锁&#xff09;&#xff0c;兼容其他事务的S锁&#xff0c;不兼容X锁&#xff08;排他锁&#xff09; select…

服务注册中心

什么是注册中心&#xff1f; 注册中心主要有三种角色&#xff1a; ● 服务提供者&#xff08;Provider&#xff09;&#xff1a;在启动时&#xff0c;向 Registry 注册自身服务&#xff0c;并向 Registry 定期发送心跳汇报存活状态。 ● 服务消费者&#xff08;Consumer&#…