Chrome 插件中,两个页面的 content.js 是否都会收到 popup.js 发送的信息?

这个是 popup.js,发送信息到 content.js。假设用户同时打开了2个浏览器页面,都使用这个插件。问2个插件的contentjs都会收到这个信息吗?

 chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {
      type: "cn_start",
      data: { list },
    })
  })

contentjs 监听信息

chrome.runtime.onMessage.addListener(async function (
  message,
  sender,
  sendResponse
) {
  const { type, data } = message
   if (type === "cn_start") {
      console.log("cn_start")
      chrome.runtime.sendMessage({
        type: "bg_start",
        data,
      })
    }
}
chrome.runtime.sendMessage({
  type: "bg_start",
  data,
})

这样发送信息,2个插件都会收到吧?

我测试的结果是 2 个插件都会收到来自其中一个的 content.js 发送过来的信息。

说一下我的业务场景。我再插件popup页面有个开始按钮,用户点击开始,我需要contentjs执行逻辑抓取页面上的内容,并发送信息通知,显示到popup页面上

阅读 1k
2 个回答
新手上路,请多包涵

可以获取tab指定吧,不然就匹配网址,消息传递的时候可以做筛选,窗口ID、标签ID、来源站点信息都可以使用啊。

目前通过我的测试。
runtime.sendMessage 是给所有的。
tabs.sendMessage(tabId) 是给指定的tab。contentjs不能直接使用tabs.sendMessage.
需要通过background转发一下。再bgjs里面使用tabs.sendMessage.
具体流程是popupjs-->contentjs-->backgroundjs-->contentjs-->popupjs
这样就区分出来了。我感觉好麻烦啊。哪里错了吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题