消息通信优化

This commit is contained in:
IndieKKY
2024-10-04 13:15:27 +08:00
parent 125996408e
commit c3b53a016c
2 changed files with 54 additions and 0 deletions

40
src/messaging/README.md Normal file
View File

@@ -0,0 +1,40 @@
## 消息通信库封装
### 消息端
一共分3个端
1. 扩展端(`background.ts`):扩展后台服务,整个浏览器最多一个实例。
2. 注入端(`inject.ts`会注入到网页中运行可以访问网页元素每个网页可能n个实例看注入的次数但多个实例一般是不必要的所以尽量控制。
3. 应用端(`App.tsx`会放入iframe中然后iframe元素添加到网页上每个iframe一个实例或者options.html选项页面也是应用实例。
### 消息通信
通信分为6个方向
1. 扩展端 --> 注入端:
1. 监听:`chrome.runtime.onMessage.addListener`
2. 发送:`chrome.tabs.sendMessage`
2. 扩展端 --> 应用端:
1. 监听:`chrome.runtime.onMessage.addListener`
2. 发送:`chrome.tabs.sendMessage`
3. 注入端 --> 扩展端
1. 监听:`chrome.runtime.onMessage.addListener`
2. 发送:`chrome.runtime.sendMessage`
4. 注入端 --> 应用端
1. 监听:`postmessage-promise`
2. 发送:`postmessage-promise`
5. 应用端 --> 注入端
1. 监听:`postmessage-promise`
2. 发送:`postmessage-promise`
6. 应用端 --> 扩展端
1. 监听:`chrome.runtime.onMessage.addListener`
2. 发送:`chrome.runtime.sendMessage`
### 通信实现方式
1. 浏览器扩展接口:对于注入端与应用端,可以用这种方式与扩展端互相通信。
1. `chrome.runtime.onMessage.addListener`
2. `chrome.runtime.sendMessage`
3. `chrome.tabs.sendMessage`
2. `postmessage-promise`库:应用端跟注入端双向通信用这个第三方库。
### 说明
1. `chrome.tabs.sendMessage`这个方法是向标签页发送信息,标签页内的所有`注入端``应用端`都会收到信息。
2. `chrome.runtime.sendMessage`这个方法是向扩展端发送信息
3. `chrome.runtime.onMessage.addListener`这个监听器三个端都能放。