Chrome 扩展清单 v3;有没有办法让后台service_worker和content_scripts之间进行通信?

问题描述 投票:0回答:1

我在后台有

service_worker
正在运行
WebSocket
与 twitch 聊天的连接。我还有
content_script
连接到音乐服务 api,处理当前曲目更改的事件。我需要从
content_script
(当前曲目信息)中提取数据,并在
service_worker
接收带有数据请求的消息时在
WebSocket
脚本中使用它。

是否有机会以最少的不同清单权限的使用来完成我的任务?

重要提示:需要清单 v3

我知道我可以使用

chrome.scripting.executeScript
注入能够从后台处理
chrome.runtime.onMessage
的实用程序脚本,并让我的
content_script
服务 api 了解
window.dispatchEvent
的数据请求,但我不想使用
permissions: ["scripting"]
和我不能直接使用
chrome.runtime.onMessage
,因为由清单属性设置的
chrome
处不存在
content_script
上下文。

我也可以在

WebSocket
运行我的
content_script
但它拒绝连接并出现错误
my_content_script_name.js:37 Refused to connect to 'wss://irc-ws.chat.twitch.tv:413/' because it violates the following Content Security Policy directive: [...]
并且我无法通过清单规则
content_security_policy
对此执行任何操作,因为 Chrome 会引发错误
 'content_security_policy.extension_pages': Insecure CSP value

javascript google-chrome-extension irc chrome-extension-manifest-v3 twitch-api
1个回答
0
投票

根据@wOxxOm评论(谢谢),需要使用两个

content_scripts

  • 第一个(未指定
    "world"
    属性)运行
    WebSocket
    ;
  • "world": "MAIN"
    中的第二个用于使用页面 API;

为了在它们之间进行通信,我们可以使用

CustomEvent
window.dispatchEvent
window.addEventListener
。因此,现在当脚本 #1 与
WebSocket
接收特定命令消息时,我可以调度从脚本 #2 请求数据的事件。

© www.soinside.com 2019 - 2024. All rights reserved.