@extend-chrome/messages

中文文档
1.2.2发布于 2021/05/26MITTypeScriptESM + CJS近 30 天下载 3238

用于 Chrome 扩展消息的 API 有道理 .

中文使用文档
文档目录14 节
  1. @ extend- chrome/ 邮件
  2. 目录
  3. 开始
  4. 安装
  5. 使用量
  6. getMessage 有很好的 TypeScript 支持 !
  7. 特征
  8. 类型脚本定义
  9. RxJs 观测器
  10. 范围
  11. API 密码
  12. getMessage(greeting)
  13. 这个 messages 命名空间
  14. getScope

@extend-chrome/messages logo

@ extend- chrome/ 邮件

npm (scoped) GitHub last commit License TypeScript Declarations Included

Fiverr: We make Chrome extensions ko-fi


Chrome 扩展消息的 API 有道理 。 承诺和 可观察方便.

目录

开始

你需要用一个像 滚动, (中文(简体) ), Parcel,或Webpack,将这个库包含在Chrome扩展的构建中.

见 rollup-plugin-chrome-extension 用Rollup来建造你的Chrome扩展!

安装

$ npm i @extend-chrome/messages

使用量

使用同位素信件包发送和接收信件,或使用 传统消息对象.

// messages.js, used in both the background and content script
import { getMessage } from '@extend-chrome/messages'

// getMessage returns [Function, Observable, Function]
export const [sendNumber, numberStream, waitForNumber] = getMessage(
  // String to be used as a greeting
  'NUMBER',
)
// background.js, a background script
import { numberStream } from './messages'

// numberStream is an RxJs Observable
numberStream.subscribe(([n, sender]) => {
  console.log('the data passed to sendNumber', n)
  // Sender is a Chrome runtime MessageSender
  console.log('the message sender', sender)
})
// content.ts, a content script
import { sendNumber } from './messages'

document.body.onclick = () => {
  sendNumber(42) // 42 is logged in the background
}

getMessage 有很好的 TypeScript 支持 !

如果你喜欢TypeScript, getMessage 是一个通用函数。 它闪耀,当 定义信件数据类型。 不再出现消息数据类型错误! 情报已经覆盖了.

// messages.ts
import { getMessage } from '@extend-chrome/messages'

interface Stats {
  hi: number
  low: number
  date: string
}

export const [sendStats, statsStream, waitForStats] = getMessage<Stats>('STATS')

// If you have a message type with no data, use void rather than undefined
// This way you can call it with zero arguments
export const [sendReady, readyStream, waitForReady] = getMessage<void>('READY')
// background.ts
import { statsStream } from './messages'

statsStream.subscribe(([{ hi, lo, date }, sender]) => {
  // Intellisense knows this is an Observable of
  // [Stats, chrome.runtime.MessageSender]
})

waitForReady().then(() => {
  console.log('content.ts is ready')
})
// content.ts
import { sendStats } from './messages'

sendStats({ hi: 30, low: 14, date: '11/12/2019' })

// Throws a TS error
sendStats('not a Stats object')

sendReady()

特征

类型脚本定义

此库用 TypeScript 书写, 广泛输入, 定义为 包含,所以不需要安装额外的 @types 图书馆!

RxJs 观测器

0.5.0版本介绍a RxJs 可观察 作为 messages.stream。 。 。 .

范围

0.5.0版本介绍 getScope,一种使用单独的 通讯空间 .

如果您正在为 Chrome 扩展写一个库, 使用 内部讯息,但你不想污染全球讯息空间.

API 密码

getMessage(greeting)

import { getMessage } from '@extend-chrome/messages'

const [sendMessage, messageStream, waitForMessage] = getMessage('greeting')

3⁄4 ̄ ̧漯B 导入到两者 信件发送者和接收者上下文(即背景页和内容) 剧本). getMessage 是 TypeScript 通用函数。 见 使用量 包含类型脚本支持的章节 !

greeting

类型 : string

一个识别消息的独特字符串 .

回返情况: [messageSender, messageStream]

类型 : [Function, Observable]

将消息Sender导入要发送的消息的上下文中。 打电话 带有您要发送的数据的发送者.

messageStream 是可观察的 [data, MessageSender] tu. 导入 将信件插入上下文中。 订阅它 带有信件处理器功能.

这个 messages 命名空间

如果您对传统消息命名空间更满意,请导入 messages 对象.

messages.send(data, [options])

发送单向消息很简单:只要打电话 messages.send 带有对象 至少包括一个 greeting 属性.

// content-script.js
import { messages } from '@extend-chrome/messages'

// Simple message with no data
messages.send({ greeting: 'hello' }).then(() => {
  console.log('The message was sent.')
})

// Message with data
messages
  .send({
    greeting: 'with-data',
    // You can use any prop name or value
    data: { x: 1 },
  })
  .then(() => {
    console.log('The message was sent.')
  })

实际上,可以将任何数据类型作为消息发送,但对象为 greeting 道具是一种很好的,灵活的图案.

得到回复 options.async

设置可选 options.async 改为 true 以获得答复。 仅信件 第三个听众 sendResponse 参数将会收到同步消息.

// content-script.js
import { messages } from '@extend-chrome/messages'

messages
  .send(
    // Message
    { greeting: 'hello' },
    // Options
    { async: true },
  )
  .then((response) => {
    console.log('They said', response.greeting)
  })

messages.on(handler)

要接收单向消息, 请使用 0 或 1 的处理器功能 参数。 此处理器将只接收未同步发送的信件 选项.

处理器的返回值未使用 .

// background.js
import * as messages from '@extend-chrome/messages'

// Listener should have 2, 1, or 0 arguments
messages.on((message, sender) => {
  if (message.greeting === 'hello') {
    console.log(sender.id, 'said hello')
  }
})
同步信件

我发现依赖Aync消息有点反模式 颜色是 关闭反应端口相当有攻击性,所以除非你这样做 一个同步的,最好用一个单独的信息 听者处理回复.

要接收同步消息,请使用3个参数的处理器. 这个处理器 将仅接收以同步选项发送的信息.

第三个论点是 sendResponse 函数,必须称之为非常 很快,否则克洛姆就会出错. 哪怕是一次等待,都可能使延期不可靠.

// Async functions are OK!
messages.on(async (message, sender, sendResponse) => {
  if (message.greeting === 'hello') {
    console.log(sender.id, 'said hello')

    await somethingAsync()

    // Still need to call sendResponse
    sendResponse({ greeting: 'goodbye' })
  }
})

messages.off(handler)

用您想要停止使用的信息处理器函数调用此功能 .

messages.stream

类型 : Observable

观察其范围内的所有信息.

import { messages } from '@extend-chrome/messages'

// Receives all messages in the default scope
messages.stream.subscribe(([message, sender, sendResponse]) => {
  if (typeof sendResponse !== 'undefined') {
    // If sendResponse is defined, it must be called
    sendResponse({ greeting: 'message received!' })
  }
})

getScope

如果您正在为 Chrome 扩展写一个库, 使用 内部讯息,但你不想污染全球讯息空间.

import { messages, getScope } from '@extend-chrome/messages'

const myScope = getScope('my-library')

// `messages.on` will not receive this message
myScope.send({ greeting: 'hey' })

// `myScope.on` will not receive this message
messages.send({ greeting: 'hello?' })

注:Chrome API事件 chrome.runtime.onMessage 还会收到所有 消息,但项目使用 @extend-chrome/messages 将不会收到来自 其他范围.

版本与发布记录

@extend-chrome/messages 共发布 8 个版本,首次发布于 2020/06/10;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.2.2latest2021/05/265 年前
1.2.2-0beta2021/05/265 年前
1.2.12021/05/265 年前
1.2.02020/12/095 年前
1.2.0-02020/12/025 年前
1.1.22020/06/136 年前

关于 @extend-chrome/messages 的常见问题

@extend-chrome/messages 是什么?

用于 Chrome 扩展消息的 API 有道理 .

如何安装 @extend-chrome/messages?

在项目目录运行 npm install @extend-chrome/messages,或使用 pnpm add / yarn add / bun add。

@extend-chrome/messages 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@extend-chrome/messages 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@extend-chrome/messages 可以商用吗?

@extend-chrome/messages 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@extend-chrome/messages 的下载量有多少?

根据 npm 官方下载统计,@extend-chrome/messages 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,238 次,日均约 108 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@extend-chrome/messages 还在维护吗?

最新版本 1.2.2 发布于 2021/05/26(5 年前);至今共发布 8 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/06/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。