使用 targetElementId 检索 TargetElement,用于 Firefox 附加组件。

问题描述 投票:0回答:1

我试图为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;
  });
}

我的工作文档来自于 火狐 创建菜单的文件和 点击数据(=信息). 这里的文档说。

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;

如果你需要更多的代码信息,我已经上传了整个background.js。在这里,我已经上传了整个background.js

我希望你知道为什么它没有工作的文件和我错了......

谢谢你的帮助和时间提前:)

javascript html firefox firefox-addon-sdk
1个回答
0
投票

你正在做的事情是行不通的。重要的部分是文档中的这句话。

在内容脚本中使用menus.getTargetElement()来定位元素。

然而你是在调用 menus.getTargetElement() 在你的后台脚本中. 你必须把这个ID从后台脚本发送到你的内容脚本。Mozilla提供了一个例子,叫做 菜单-删除-元素.

文件 对于menus.getTargetElement也有一个非常简短的例子,使用了 browser.tabs.executeScripttargetElementId.

© www.soinside.com 2019 - 2024. All rights reserved.