Я хочу иметь возможность общаться из сценария контента (любая вкладка) в фоновый режим.
Согласно документации, я должен использовать chrome.extension chrome.runtime.onMessage
с chrome.runtime.sendMessage
.
Итак, что я сделал:
manifest.json
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"*://*/*"
],
фон.js
console.info('1');
chrome.runtime.onMessage.addListener((request, sender, sendReponse) => {
console.info('2');
sendReponse({ msg: 'foo' });
return true;
});
Я не очень уверен, что return true;
нужен. Пробовал с и без.
После создания и перезагрузки расширения я получил доступ к фоновой странице Chrome через chrome://extensions
> 1 // background.js file was run
> chrome.runtime.sendMessage({ hello: 'so' }, v => console.info(v))
> undefined
> undefined // This is the callback response I get. Why?
Что еще более важно, я также получаю пустой обратный вызов ответа при запуске sendMessage из других вкладок (например, stackoverflow.com)
> chrome.runtime.sendMessage('extension id', { hello: 'so' }, v => console.info(v))
> undefined
> undefined
Почему я получаю пустой ответ обратного вызова?
Я пропустил какое-то специальное разрешение? Неверные параметры? Может быть, неправильные функции API для этого?
return true
, он нужен только тогда, когда ответ отправляется из асинхронно исполняемого кода. - person wOxxOm   schedule 08.04.2017