在侧面板打开或关闭时检测内容脚本?

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

我可以在内容脚本中检测侧面板是打开还是关闭吗?

当侧面板加载时,我可以获取 tabId 并将其保存到侧面板打开的存储中。

在侧面板:

const tabs = await chrome.tabs.query({ active: true, currentWindow: true });
chrome.storage.session.set({ [`TAB_${tabs[0].id}`]: 'sidepanel-open' });

但是我不知道侧面板关闭时发生任何事件。我可以使用一个间隔向侧面板发送消息,如果没有响应返回,则假设其已关闭。不过感觉很老套:

在内容脚本中:

  setInterval(() => {
    chrome.runtime
      .sendMessage({ ['sidepanel-check']: true })
      .then((msgRes) => {
        if (msgRes !== true) {
          chrome.storage.session.set({
            [`${TAB_}${tabId}`]: 'sidepanel-closed',
          });
        }
      });
  }, 1000);

在侧面板:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request['sidepanel-check'] === true) {
    sendResponse(true);
  }
});
google-chrome-extension
1个回答
0
投票

您可以使用以下事件

DOMContentLoaded
来检测侧面板是否打开。在此基础上你可以建立你的逻辑。

document.addEventListener('DOMContentLoaded', async function () {
    // if sidepanel is open, this code block will be called.
});

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