我在后台脚本中有一个制表符更改侦听器,它将向内容脚本发送一条消息,以在内容脚本中执行一组操作。
我在后台脚本中的代码是
window.chrome.tabs.onActivated.addListener((activeInfo) => {
window.chrome.tabs.sendMessage(activeInfo.tabId, { type: 'getLibraries' }, (data) => {
// do some thing
});
});
内容脚本是
window.chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
switch (message.type) {
case 'getLibraries':
// do something
break;
default:
console.error('Unrecognised message: ', message);
}
});
在大多数情况下,这可以正常工作。当我将扩展程序添加到浏览器并切换到先前打开的选项卡时,内容脚本将不会在那里显示,因为在加载选项卡时插件不存在。这时,后台脚本会尝试在选项卡更改时发送消息。由于没有内容脚本,Chrome会引发以下错误
未经检查的runtime.lastError:无法建立连接。接收端不存在
我需要在后台脚本中进行选项卡更改检测,这会将消息发送到内容脚本,而不会导致上述错误。有什么方法可以检测内容脚本是否已从后台脚本加载?