在Firefox中自定义选项卡上下文菜单

时间:2015-09-01 05:17:38

标签: firefox sdk contextmenu

我正在尝试通过其附加组件SDK找到一种自定义方式 - 在Firefox中的标签上下文菜单中添加更多项目。到目前为止,我知道我们只能自定义page context。有谁知道我们如何才能完成我想要做的事情?

还有类似的question询问了Google Chrome。

1 个答案:

答案 0 :(得分:0)

如果还有任何帮助,这就是我到目前为止为了向youtube.com添加“m​​enuitem”选项卡右键菜单所取得的成就

// Import necessary APIs
var tabs = require("sdk/tabs");

var { MatchPattern } = require("sdk/util/match-pattern");
var pattern = new MatchPattern("*.youtube.com");

// Localization
var _ = require("sdk/l10n").get;
// Convert higher-level object to lower-level one
var { viewFor } = require("sdk/view/core");

tabs.on('ready', function(tab) {
  if (pattern.test(tab.url)) {
    let doc = viewFor(tab.window).document
    let menu = doc.getElementById("tabContextMenu");
    let newtab = doc.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul","menuitem");
    newtab.setAttribute("id", "contexttab-newtab");
    newtab.setAttribute("label", _("newtab_string"));
    newtab.setAttribute("accesskey", _("newtabaccesskey_string"));
    newtab.setAttribute("oncommand", "BrowserOpenTab();");
    menu.insertBefore(newtab, menu.firstChild);
  }
});

来自let menu = doc.getElementById("tabContextMenu");的代码在https://addons.mozilla.org/en-US/firefox/addon/new-tab-in-tab-context-menu/

的“选项卡上下文菜单中的新标签页”中无耻地抄袭

基本思想是你需要根据this页面将tab.window对象转换为'chrome window'(较低级别和较旧的XUL类型对象/ api)。然后直接将上下文menuitem创建为XUL对象。

希望这有帮助。