从 Chrome 扩展程序侧面板向内容脚本发送消息

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

我正在开发一个 chrome 扩展,它需要根据侧面板中勾选的复选框来操作 DOM。

我试图通过存储在 chrome 本地存储中勾选了哪些复选框,然后从侧面板脚本发送消息到内容脚本来运行 DOM 脚本,该脚本检索存储在本地存储中的参数,然后相应地操作 DOM 。 我的扩展程序未注册后台脚本。

我尝试了多种围绕 chrome.tabs.sendMessage 的方法,但我一直遇到同样的错误:

Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.

这是我的代码:

manifest.json:

{
    "manifest_version": 3,
    "name": "Name",
    "description": "Description",
    "version": "1.0",
    "side_panel": {
        "default_path": "./sidepanel/sidepanel.html"
    },
    "permissions": [
        "sidePanel",
        "storage",
        "tabs",
        "activeTab"
    ],
    "content_scripts": [
        {
            "matches": ["www.pageurl.com/*"],
            "js": ["./utilities/background.js"]
        }
    ]
}

sidepanel.html:

<!DOCTYPE html>
<html lang="en">
    [...]
    <body>
        [...]
        <input id="triggerBtn" type="checkbox" name="" class="switch is-rounded is-outlined is-info" />
        [...]
    </body>
    <script src="./sidepanel.js"></script>
</html>

sidepanel.js :

document.getElementById("triggerBtn").addEventListener("click", () => {
    chrome.tabs.query({ active: true, lastFocusedWindow: true }, function (tabs) {
        var tab = tabs[0];
        chrome.tabs.sendMessage(tab.id, "TEST");
    });
});

实用程序/background.js :

chrome.runtime.onMessage.addListener((message) => {
    console.log(message);
});

我做错了什么?

javascript google-chrome-extension
1个回答
0
投票

当您的消息不一定有接收端时,我会收到此错误。这使得实施起来相当复杂。

但是,在您的情况下,永远没有接收端;您需要在内容脚本和弹出/侧面板脚本之间放置一个服务工作者来传递消息。

还有;非常确定“tabs”权限消除了对“activeTab”的需要。

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