Я разрабатываю расширение chrome, и мне нужно внедрить редактор ярлыков. Во всплывающем окне у меня есть редактор ярлыков, и когда ярлык меняется, в контент-скрипт отправляется сообщение и обновляется Vuex.
Сообщение отправляется правильно, а мутация vuex также вызывается корректно. Теперь проблема в том, что данные, похоже, не реагируют. Я вижу, что данные корректно обновляются в локальном хранилище с помощью vuex-persist, но затем состояние хранилища не обновляется.
После перезапуска браузера загружается правильное состояние (с новым ярлыком).
popup. js
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {
id: this.data.id,
shortcut: this.data.shortcut,
});
});
content. js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.hasOwnProperty("id")){
store.commit("changeShortcut", request)
}
});
магазин. js
const vuexLocal = new VuexPersistence({
storage: window.localStorage
})
const store = new Vuex.Store({
state: {
shortcuts: shortcuts,
},
getters: {
getField,
},
mutations: {
changeShortcut (state, n) {
var item = state.shortcuts.find((x) => x.id == n.id);
item.shortcut = n.shortcut
state.shortcuts = [item,
...state.shortcuts.filter(element => element.id !== n.id)
]
},
updateField,
},
plugins: [vuexLocal.plugin],
})
введен. js (ключ для ярлыков)
document.addEventListener('keydown', (e) => {
if(e.target.nodeName.toLowerCase() === "input"){
return;
}
if (!e.repeat){
var shortcut = store.state.shortcuts.find(el => el.shortcut == e.key);
if(shortcut){
actions[shortcut.f](...(shortcut.params ? shortcut.params : []));
}
}
});
Я думаю, что проблема заключается в как я обновил ярлык в мутации, но я пытался использовать различные вещи, такие как Object.assign () или Vue .set ().