Получить TargetElement с targetElementId для Firefox Addon - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь создать надстройку для Firefox, которая позволяет мне вводить пароль с сервера на основе REST в поле ввода.

Для этого я добавил контекстные меню с помощью надстройки Firefox.

As you can see I already succeeded in creating the context Menus

Прослушиватель этих контекстных меню реализован следующим образом:

add_listener(menu_id, listener) {
  const click_listener = function(info, tab) {
  if ('' + info.menuItemId == menu_id + '') {
    console.debug(info.targetElementId);
    listener(browser.menus.getTargetElement(info.targetElementId));
    }
  };
  this.listeners.push(click_listener);
  browser.contextMenus.onClicked.addListener(click_listener);
}

for (const pwDataEntry of pwDataSet.entries) {
  const entryId = menu_service.create_sub_menu(null, pwDataEntry.key, setId);
  menu_service.add_listener(entryId, element => {
    console.debug(element);
    element.value = pwDataEntry.content;
  });
}

Я работаю над документация от Firefox для создания меню и документация для ClickData (= info) . Здесь документация гласит:

targetElementI integer. Идентификатор элемента, если таковой имеется, над которым было создано контекстное меню. Используйте menus.getTargetElement () в скрипте содержимого, чтобы найти элемент. Обратите внимание, что это не атрибут id элемента страницы.

Как вы можете видеть, я реализовал извлечение элемента именно так, как задокументировано. Дело в том, что Firefox говорит мне, что он не нашел элемент:

3056573 background.js:32:25
null  background.js:120:29
element is null background.js:121

background.js:32:25 -> console.debug(info.targetElementId);
background.js:120:29 -> console.debug(element);
background.js:121 -> element.value = pwDataEntry.content;

Если вам нужна дополнительная информация о коде, я загрузил весь фон. js здесь

Надеюсь, вы знаете, почему это не сработало, как описано в документации, и где я ошибся ...

Спасибо за вашу помощь и заранее:)

1 Ответ

0 голосов
/ 02 мая 2020

То, что вы делаете, не сработает. Важной частью является это предложение в документации:

Используйте menus.getTargetElement () в скрипте содержимого, чтобы найти элемент.

Однако вы звоните menus.getTargetElement() в вашем фоновом скрипте. Вам нужно будет отправить этот идентификатор из фонового скрипта в ваш скрипт контента. Mozilla предоставляет пример для этого menu-remove-element .

Документация для menus.getTargetElement также имеет очень короткий пример с использованием browser.tabs.executeScript с targetElementId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...