#angular #google-chrome-extension
Вопрос:
У меня есть определенный компонент, в котором, если пользователь нажимает кнопку, он выполняет то, что должно выполняться, даже если всплывающее окно закрыто, причина, по которой я хотел подойти к этой проблеме с помощью фонового сценария, однако я не могу отправить сообщение этому сценарию, потому что я продолжаю получать эту ошибку Could not establish connection. Receiving end does not exist
.
приложение.компонент.ts
activate(): void {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {msg: 'active'}, function(response) {
console.log(response.msg);
});
});
}
предыстория.ts
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
console.log(request.msg);
// do something and when it's done send a response
sendResponse({msg: 'inactive'});
}
);
манифест.json
{
"manifest_version": 2,
"name": "foo",
"permissions": [
"background",
"activeTab",
"storage",
"webNavigation",
],
"background": {
"scripts": [
"background.js",
"runtime.js"
],
"persistent": false
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "index.html"
}
}
Примечание: Я также попытался отправить сообщение таким образом в компоненте
chrome.runtime.sendMessage({
msg: 'active'
}, function(response){
// do something
});
Я также попытался вернуть значение true в функции прослушивателя
Но я получаю ту же ошибку.
Как я мог это исправить?
Комментарии:
1. @wOxxOm после перезагрузки вкладки я получаю эту ошибку
The message port closed before a response was received.
2. Подождите, ваш первый код отправляет сообщение в сценарий содержимого, но вы не используете никакой, поэтому chrome.runtime.SendMessage-правильный подход. Я предполагаю, что вы видите старую ошибку на странице chrome://расширения, и в этом случае нажмите
clear
кнопку. В любом случае, откройте devtools для фонового сценария и еще один для всплывающего окна, установите точки останова и посмотрите, что произойдет.3. да, это было так, странно