npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@kky002/kky-message

v0.2.1

Published

chrome extension message library for react

Readme

消息通信库封装

此消息通信库设计为通用的,后面可能会提取到单独的项目中。

消息端

一共分3个端:

  1. 扩展端(background.ts):扩展后台服务,整个浏览器最多一个实例。
  2. 注入端(inject.ts):会注入到网页中运行,可以访问网页元素,每个网页可能n个实例(看注入的次数),但多个实例一般是不必要的,所以尽量控制在一个实例。
  3. 应用端(App.tsx):会放入iframe中,然后iframe元素添加到网页上,每个iframe一个实例;或者options.html选项页面也是应用实例;或者sidepanel.html页面也是应用实例。

消息协议

协议分两层:

  1. (底层)一层协议为Layer1Protocol,内部封装了port,支持双向通信(发送与接收)
  2. (高层)二层协议分3个部分,基于一层协议:
    1. ExtensionMessaging:扩展端的
    2. InjectMessaging:注入端端
    3. useMessagingServiceuseMessaging:应用端的

通信方向

通信分为6个方向:

  1. 扩展端 --> 注入端: chrome.tabs.sendMessage
  2. 扩展端 --> 应用端: chrome.tabs.sendMessage or port
  3. 注入端 --> 扩展端: chrome.runtime.sendMessage
  4. 注入端 --> 应用端: chrome.runtime.sendMessage(通过扩展端中转)
  5. 应用端 --> 注入端: chrome.runtime.sendMessage or port(通过扩展端中转)
  6. 应用端 --> 扩展端: chrome.runtime.sendMessage or port

通信流程

  1. 普通方式:应用端/注入端通过chrome.runtime.sendMessage向扩展端发送消息;扩展端通过chrome.tabs.sendMessage向应用端/注入端发送消息。
  2. port方式:应用端/注入端通过chrome.runtime.connect连接扩展端,然后发送握手信息(里面包含了此端的一些信息),然后通过port双向通信。

ps

sidePanel里无法通过chrome.runtime.sendMessage向扩展端发送消息,所以才用port方式。 但长连接更占资源,且容易自动断掉,需要重连,因此如果没有用到sidePanel时不推荐使用。