chrome插件消息传递的问题

发布于 2022-09-05 09:19:24 字数 813 浏览 19 评论 0

实现点击插件图标,向网页插入插件的Dom,再次点击Dom消失,以此类推
打算用变量flag记录dom是否开启,尝试了下chrome文档里的短连接和长连接,短连接从bg.js到content.js没有问题,但变量无法反馈回去;长连接我没尝试成功。

1.应该选择那种消息传递方式,具体如何实现;
2.是否有其他方法实现点击插件图标开关Dom。

插件结构如下

manifest.json
  ...

  "background": {
    "scripts" : ["bg.js"],
    "persistent": false
  },

  "permissions": [
    "activeTab",
    "tabs",
    "http://*/*",
    "https://*/*"
  ]
bg.js
chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "jquery.min.js"});
    chrome.tabs.executeScript(null, {file: "content.js"});
    // 消息传递到content.js
    ....
    
    });

});
content.js

//接受bg.js消息
...
//Dom操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

难以启齿的温柔 2022-09-12 09:19:24

我没试过长连接的方法,我之前实现过一个bg--content之间传递消息的demo。
bg.js

chrome.tabs.query({active: true, currentWindow: true}, 
    function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {greeting: "get box"}, function(response) {
            console.log(response);
        });
    }
); 

content.js

function onMessage(done, opt) {
    chrome.runtime.onMessage.addListener(
        function(message, sender, sendResponse) {
            if (message) {
                setTimeout(function(){
                    if (done && opt) {
                        done(opt);
                    }
                }, 0)
                sendResponse({greeting: "Set Inputs"})
            }
    });
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文