Проблема в том, что на одной вкладке может быть только один onRequest
слушатель. Поэтому, если вы хотите отправлять сообщения в сценарий only iframe, а на странице есть только один iframe, то вы должны создать прослушиватель внутри только iframe:
//listen to requests only inside iframe
if(window!=window.top) {
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
...
});
}
Теперь, если вы хотите отправить запросы на на родительскую страницу и iframe, или на странице много iframes, которые должны прослушивать запросы - вам нужно общаться через порты .
Порты по-прежнему имеют аналогичное ограничение - будет вызываться только один прослушиватель портов, но вы можете открыть много портов. Если есть родительская страница только с одним iframe - вы просто открываете два соединения на двух разных портах. Но если на странице много iframe, и каждый iframe имеет подкадры - вам нужно сначала перечислить все iframe, чтобы создать уникальные порты для каждого из них.
PS. Я не уверен, что вы имели в виду
Я предпочитаю не открывать соединение всеми скриптами контента
но если вы хотите внедрить скрипт содержимого по требованию, есть chrome.tabs.executeScript()
.