首页 > 其他分享 >chrome插件:content.js、background.js, options.js, popup.js之间的通信

chrome插件:content.js、background.js, options.js, popup.js之间的通信

时间:2023-09-10 11:03:15浏览次数:45  
标签:插件 popup js content background message options



目录

  • content.js向background.js发送消息
  • background.js向content.js发送消息
  • options.js或popup.js向background.js传递数据
  • 总结


content.js向background.js发送消息

消息方向:

// content.js 一般不直接与options.js, popup.js 通信,而是与常驻的background.js通信
content.js => [background.js, options.js, popup.js]

发送消息:

// content.js
chrome.runtime.sendMessage({data: 'Hello'})

接收消息:

// background.js, options.js, popup.js
chrome.runtime.onMessage.addListener(function (message){
    console.log(message);
})

接收情况:

// background.js message 
{data: 'Hello'}

// options.js message 
{data: 'Hello'}

// popup.js message 
{data: 'Hello'}

background.js向content.js发送消息

webextension-polyfill 通过browser代理对象,可以让chrome实现Promise

// https://github.com/mozilla/webextension-polyfill
import browser from "webextension-polyfill";

// 获取当前活跃的tab
const tabs = await browser.tabs.query({
   active: true,
   currentWindow: true,
 });

 if (tabs && tabs.length > 0) {
   await browser.tabs.sendMessage(tabs[0].id, message);
 }

options.js或popup.js向background.js传递数据

background.js 定义接收函数

// background.js
function onMessage(message) {
  console.log(message);
}

// 注意,如果是模块化打包,需要挂载到全局
window.onMessage = onMessage;


options.js 调用消息接收函数

```js
// options.js 或者 popup.js
const background = chrome.extension.getBackgroundPage();
background.onMessage({ data: "hello" });

接收到的数据

// background.js message 
{data: 'hello'}

总结

可以把background.js看做是服务端或者一个桥梁或者是全局状态管理器,其他组件和它通信,存取数据都和background.js要,这样编程会简单很多

content.js <=> background.js <=> [options.js, popup.js]

参考文章

  1. 谷歌浏览器插件content_scripts、background、popup之间的通信
  2. 【总结】1798- Chrome插件实时通信的几种方式


标签:插件,popup,js,content,background,message,options
From: https://blog.51cto.com/mouday/7423867

相关文章

  • chrome插件:一个基于webpack + react的chrome 插件项目模板
    项目结构$tree-L1.├──README.md├──node_modules#npm依赖├──package.json#详细依赖├──pnpm-lock.yaml├──public#里边包含dist,安装的时候安装这个目录即可├──src#源码文......
  • SonarQube教程:idea配置及使用sonarlint插件扫描项目
    下载插件settings--plugins--marketplace中搜索sonarlint,安装后重启idea配置插件settings中搜索sonarlint配置远程sonarqube服务器地址,及相关鉴权信息使用插件在项目名称上或某个java文件中右击,选择AnalyzewithSonarlint或者在idea底部找到sonarlint,点击绿色开始按钮,即可开......
  • SonarQube教程:使用maven插件的方式扫描项目代码
    sonar扫描代码的三种途径配置Mavensettings.xml增加如下内容,注意pluginGroups和profiles都是settings下面的一级标签<pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>so......
  • Jenkins 插件
    第三方服务集成Jenkins插件https://help.gitee.com/devops/connect/Jenkins-Plugin目录目录简介目前支持特性计划中特性插件安装插件配置添加Gitee链接配置新建构建任务任务全局配置源码管理配置触发器配置构建后步骤配置构建结果回评至Gitee构......
  • IDEA 高效插件推荐(提升工作效率)
    官网:https://plugins.jetbrains.com/Codota-代码智能提示直接在IntelliJ、AndroidStudio或Eclipse中使用从数百万个程序中学习的代码完成,更快、更智能地编写代码。Lombok简化臃肿代码插件编程中,往往需要在实体类定义各种字段,那么就需要写get/set/构造/toString/......
  • nodejs采集淘宝、天猫网商品详情数据以及解决_m_h5_tk令牌及sign签名验证(2023-09-09)
    一、淘宝、天猫sign加密算法淘宝、天猫对于h5的访问采用了和APP客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通过cookie带回服务端分配的token,客户端利用分配的token对请求的URL......
  • 【JS】并发请求调度器实现演示
    控制多个请求的并发度,演示请求的过程和用时结果demo:https://scheduler-smoky.vercel.app/github:https://github.com/zjy4fun/scheduler   <scriptsetuplang="ts">import{ref}from'vue'classScheduler{queue:any[]maxCount:numberrunCoun......
  • Node.js+Express+Koa2开发接口学习笔记(一)
    http请求概述浏览器输入一个地址后,进行DNS解析(通过域名查找对应的IP地址),与server建立TCP连接(进行三次握手),发送http请求server接收到http请求,处理,并返回客户端(这里指浏览器)接收到返回数据,处理数据(如渲染页面,执行js)客户端与服务器的三次握手大致可以理解为:第一次握手:客......
  • 什么是 Angular 应用 angular.json 中的 assets 数组
    在Angular项目中,angular.json是一个非常重要的配置文件,用于定义和管理项目的各种设置和构建选项。其中,assets数组是angular.json中的一个关键配置项,用于指定需要在构建后包含在应用程序中的静态资源文件和文件夹。在本文中,我将解释什么是assets数组,并提供详细示例来说明如何使用它......
  • Android中使用GSON解析JSON数据
    Android中使用GSON解析JSON数据,以下为java代码。我这个是Unity项目打包出来的android工程,工程里自带有gson的库,所以能直接用了。publicvoidStringToJsonByGson(Stringjson){Gsongs=newGson();Model1model=gs.fromJson(json,Model1.class......