Firefox 的附加 SDK:上下文菜单没有工具提示?

Firefox's add-on SDK: no tooltip for context-menu?

official documentation中约context-menu没有提到tooltip。当用户悬停在我的项目菜单上时是否无法显示弹出文本?

这是可能的,需要一些额外的代码。

首先您需要一个虚拟菜单项作为触发器,随后将工具提示添加到实际菜单项中。

很容易找出哪些菜单项是由addon-sdk模块构造的,因为它们有class addon-context-menu-item。困难的部分是识别那些属于您的扩展。

实现它的一种方法是利用 Item class 构造函数的 data 属性,它可以方便地映射到底层 xul 元素的 value 属性。

因此,如果 data 由独特的前缀和所需的工具提示文本组成,则只需在适当的时候启动即可。

const { getMostRecentBrowserWindow } = require("sdk/window/utils");

var cm = require("sdk/context-menu");
var uuid = require('sdk/util/uuid').uuid();
var uuidstr = uuid.number.substring(1,37)

cm.Item({
  label: "My Menu Item",
  context: cm.URLContext("*.mozilla.org"),
  data: uuidstr+"This is a cool tooltip"
});

cm.Item({
  label: "global Item",
  data: uuidstr+"Tooltips FTW"
});

cm.Item({
  label: "Just a tigger, will never show up",
  contentScript: 'self.on("context", function(){self.postMessage(); return false;})',
  onMessage: function(){
    var chromewin = getMostRecentBrowserWindow();
    var cmitems = chromewin.document.querySelectorAll(".addon-context-menu-item[value^='"+ uuidstr +"']");
    for(var i=0; i < cmitems.length; i++)
      cmitems[i].tooltipText = cmitems[i].value.substring(36);
  }
})

如果您已经在使用 data,则需要做一些额外的工作。