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
,则需要做一些额外的工作。
在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
,则需要做一些额外的工作。