我可以在内容脚本中检测侧面板是打开还是关闭吗?
当侧面板加载时,我可以获取 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);
}
});
您可以使用以下事件
DOMContentLoaded
来检测侧面板是否打开。在此基础上你可以建立你的逻辑。
document.addEventListener('DOMContentLoaded', async function () {
// if sidepanel is open, this code block will be called.
});