Расширение Chrome: как отправить фон формы сообщения в фон?

Мой фоновый слушатель

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse)

В прослушивателе chrome.contextMenus.onClicked я хочу использовать систему сообщений, я звоню

chrome.runtime.sendMessage

в слушателе, но это не работает.

Итак, как я могу отправить сообщение из фона в фон?


person wener    schedule 27.07.2013    source источник


Ответы (2)


Сообщения, отправленные страницей, не принимаются той же страницей.

Если вы хотите иметь возможность повторно использовать прослушиватель onMessage, поместите его в отдельную функцию. Например:

function alwaysDoSomething() {
    console.log('Done something!');
}
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    alwaysDoSomething();
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
    alwaysDoSomething();
});

Существует недокументированный метод, который можно использовать для запуска событий вручную. Он не задокументирован, поэтому используйте его на свой страх и риск!

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    var message = 'whatever';
    var sender = {tab: null, id: chrome.runtime.id};
    var sendResponse = function() {};
    chrome.runtime.onMessage.dispatch(message, sender, sendResponse);
});
person Rob W    schedule 27.07.2013
comment
Спасибо, может быть, это единственный способ достичь своей цели. На самом деле, для каждого сообщения у меня есть функция, которая делает это, функции нужен тот же параметр, что и слушателю. Если я вызываю функцию напрямую, это усложняет мою структуру. - person wener; 27.07.2013
comment
@wener Самый чистый способ сделать это опубликован в верхней части моего ответа, а метод, который не требует каких-либо изменений в вашем коде, опубликован в конце. - person Rob W; 27.07.2013
comment
Спасибо, это выглядит странно, но у меня нет другого выбора. Может быть, это пропущенная вещь в системе расширений. - person wener; 29.07.2013

Я думаю, вам следует использовать chrome.extension.onRequestExternal или chrome.extension.onConnectExternal

person Sam Su    schedule 27.07.2013
comment
Я должен убедиться, что слушатель может прослушать сообщение из contentScript и всплывающего окна, теперь contentScript и всплывающее окно работают нормально, но в фоновом режиме это не работает. - person wener; 27.07.2013