Как назначить сочетание клавиш для запуска функции в манифесте расширений Chrome v3
Я застрял, пытаясь реализовать команду Action, чтобы сочетание клавиш запускало функцию внутри background.js . В текущем коде ничего не происходит при нажатии сочетания клавиш.
В идеале сочетание клавиш должно запускать функцию reddenPage внутри background.js .
Я предполагаю, что какой-то код нужно поместить в background.js , я просто не уверен, где и какой код должен быть. Любая помощь высоко ценится!
Manifest.json
{
"name": "Page Redder",
"action": {},
"manifest_version": 3,
"version": "0.1",
"description": "Turns the page red when you click the icon",
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "background.js"
},
"commands": {
"_execute_action": {
"suggested_key": {
"default": "Ctrl+Shift+F",
"mac": "MacCtrl+Shift+F"
}
}
}
}
background.js
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: reddenPage
});
});
2 ответа
В
command
api используется для прослушивания и действий с сочетаниями клавиш.
Manifest.json
{
"name": "My extension",
...
"commands": {
"run-foo": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y"
},
"description": "Run \"foo\" on the current page."
},
"_execute_action": {
"suggested_key": {
"windows": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y",
"chromeos": "Ctrl+Shift+U",
"linux": "Ctrl+Shift+J"
}
}
},
...
}
Слушателя можно добавить в
background.js
слушать команду.
Background.js
chrome.commands.onCommand.addListener((command) => {
console.log(`Command: ${command}`);
});
Ответ лейлуна неверен! Как говорится в документации расширения Chrome:
Команды _execute_action (Manifest V3), _execute_browser_action (ManifestV2) и _execute_page_action (Manifest V2) зарезервированы для действия по запуску вашего действия, действия браузера или действия страницы соответственно. Эти команды не отправляют события command.onCommand, как стандартные команды.
Вы правильно используете
action.onClicked
мероприятие.
Проблема в том, что в параметре
executeScript
вы написали
function
вместо того
func
. Согласно документации , вызов функции должен выглядеть так:
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
});
Кроме того, цвет фона страницы, которую вы пытаетесь сделать покрасневшей, может быть установлен как. В этом случае изменение цвета фона не повлияет, так как он будет перезаписан
!important
стиль. Чтобы убедиться, что цвет фона применен, вы можете использовать
document.body.style.setProperty('background-color', 'red', 'important');