Обнаружение открытия всплывающего окна довольно простое, поскольку код внутри него выполняется каждый раз, когда открывается всплывающее окно.Поэтому все, что вам нужно сделать, это поместить запрос на фоновую страницу в начале всплывающего кода.
Вторая часть будет заключаться в вводе скрипта контента по требованию (насколько я понимаю, в текущую вкладку).
Таким образом, вся структура расширения должна выглядеть примерно так:
popup.html
//this will run each time popup opens
chrome.extension.sendRequest("start", function(data) {
//display data received from background page through content script
});
background.html
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request == "start") {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.executeScript(tab.id, {file: "contentscript.js"}, function() {
//content script is injected, send a request to it
chrome.tabs.sendRequest(tab.id, "get_data", function(data){
//content script sent response back with data we need to display in popup
sendResponse(data);
});
});
});
}
}));
Следует иметь в виду, что к моменту получения данных всплывающее окно может быть уже закрыто, поэтому может потребоваться добавить обработку ошибок.
Второй проблемой было бы избегать внедрения скрипта контента дважды на одну и ту же страницу.Это может быть проблематично, поэтому я бы посоветовал, если ваш скрипт контента маленький, а затем просто внедрить его на все страницы (в манифесте).