Активируются ли сочетания клавиш Firefox только при запуске браузера?

#javascript #firefox #firefox-addon #firefox-addon-restartless

#javascript #firefox #firefox-дополнение #firefox-дополнение-без перезапуска

Вопрос:

В дополнении Firefox без перезапуска сочетания клавиш исчезают после отключения и включения дополнения. Консоль не регистрирует никаких ошибок ( try{}catch{} ).

При проверке Browser Toolbox key вставляется обратно в <keyset id="mainKeyset"> , но сочетание клавиш не работает, и модификаторы не отображаются в контекстном меню.

Итак, вопрос в том, я что-то пропустил или сочетания клавиш активируются только при запуске браузера?

Комментарии:

1. Поскольку вы решили это самостоятельно (отлично!), правильный способ — ответить на свой собственный вопрос и принять свой собственный ответ, вместо редактирования вашего вопроса 😉

Ответ №1:

Я нашел проблему…

Хотя порядок (создания / вставки) keyset amp; context menuitem не имел значения при запуске браузера, это имело значение при повторном включении дополнения restartless. Перемещение keyset создания / вставки в before menuitem creation / insertion решило проблему.

По запросу:
Сначала у меня был сначала /* ContextMenu Menuitem */ раздел, а затем /* keyset */ раздел. Введя /* keyset * / section first, the keyset was created amp; inserted before inserting the contextmenu menutiem` и это устранило проблему.

 let contextMenu = window.document.getElementById('contentAreaContextMenu');

/* keyset */
let mainKeyset = window.document.getElementById('mainKeyset'); // parent -> #main-window
let keyset = window.document.createElement('keyset');
//keyset.setAttribute('id', this.id   '-keyset'); // if you need to have an id
let key = window.document.createElement('key');
key.setAttribute('id', this.id   '-key');
key.setAttribute('modifiers', 'accel shift');
key.setAttribute('keycode', 'VK_F2');
key.setAttribute('oncommand', 'void(0);');
key.addEventListener('command', this, false);
keyset.appendChild(key); // add the key to keyset
mainKeyset.parentNode.appendChild(keyset);  // add the keyset to the window.document

/* ContextMenu Menuitem */
let docfrag = window.document.createDocumentFragment(); // temporary container
let menuseparator = window.document.createElement('menuseparator');
let menuitem = window.document.createElement('menuitem');
//menuitem.setAttribute('id', this.id   '-menuitem'); // if you need to have an id
menuitem.setAttribute('class', 'menuitem-iconic');
menuitem.setAttribute('label', this.menuitemLabel);
//menuitem.setAttribute('hidden', 'true'); // starts from hidden
menuitem.setAttribute('accesskey', 'R');
menuitem.setAttribute('key', this.id   '-key');
//menuitem.style.listStyleImage = 'url(chrome://'   this.id    '/skin/icon16.png)'; // this also works
menuitem.setAttribute('style', 'list-style-image: url(chrome://'   this.id    '/skin/icon16.png);');
menuitem.addEventListener('command', this, false);

docfrag.appendChild(menuseparator); // adding the menuseparator to temporary container
docfrag.appendChild(menuitem); // add the menuitem to temporary container
contextMenu.appendChild(docfrag); // add the temporary container to the contextMenu
  

Комментарии:

1. Спасибо за совместное использование man. Можете ли вы опубликовать код, который вы выполняли до, а затем после исправления? Это очень поможет.

2. @Noitidart … Я добавляю окончательный код для вас. Предыдущий код был точно таким же, но /* keyset */ раздел был после /* ContextMenu Menuitem */