使用 Firefox 插件的 targetElementId 检索 TargetElement

Retrieve TargetElement with targetElementId for Firefox Addon

我正在尝试为 Firefox 创建一个附加组件,它使我能够从基于 REST 的服务器向输入字段输入密码。

为此,我在 Firefox 的附加组件中添加了上下文菜单。

这些上下文菜单的侦听器实现如下:

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 for creating a menu and the documentation for ClickData (=info) 的文档。这里的文档说:

targetElementI integer. An identifier of the element, if any, over which the context menu was created. Use menus.getTargetElement() in the content script to locate the element. Note that this is not the id attribute of the page element.

如您所见,我已经完全按照记录实施了元素检索。 问题是 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;

如果您需要有关代码的更多信息,我已经上传了整个 background.js here

我希望你知道为什么它没有像记录的那样工作以及我哪里出错了......

感谢您的帮助和提前时间:)

你所做的是行不通的。重要的部分是文档中的这句话:

Use menus.getTargetElement() in the content script to locate the element.

但是您在后台脚本中调用了 menus.getTargetElement()。您必须将该 ID 从后台脚本发送到您的内容脚本。 Mozilla 为此提供了一个名为 menu-remove-element.

的示例

menus.getTargetElement 的 documentation 也有一个非常简短的例子,使用 browser.tabs.executeScripttargetElementId