0

我正在尝试开发一个 ff 插件,它允许用户右键单击表单元素并执行与之关联的任务。

不幸的是,有人认为上下文菜单不应该出现在 ff 中的表单输入中,尽管进行了长时间的讨论https://bugzilla.mozilla.org/show_bug.cgi?id=433168,但它们仍然没有出现在复选框、收音机或选择中.

我确实找到了这个:https ://developer.mozilla.org/en-US/docs/Offering_a_context_menu_for_form_controls但我想不出如何翻译代码以使用新的附加 SDK。我尝试将显示的 javascript 转储到内容脚本中,也尝试通过观察者服务转储,但无济于事。

我也找不到推荐的扩展https://addons.mozilla.org/en-US/firefox/addon/form-control-context-menu/的来源,考虑到它是“专门为演示如何做到这一点而创建的”很令人沮丧。

这似乎是非常基本的插件功能,任何帮助或指向更简单文档的链接将不胜感激。

** 更新 **

我在 main 所需的文件中添加了以下代码,这似乎可以解决问题。

var {WindowTracker} = require("window-utils");

var tracker = WindowTracker({
  onTrack: function(window){
    if (window.location.href == "chrome://browser/content/browser.xul") {    
      // This is a browser window, replace
      // window.nsContextMenu.prototype.setTarget function
      window.setTargetOriginal = window.nsContextMenu.prototype.setTarget;

      window.nsContextMenu.prototype.setTarget = function(aNode, aRangeParent, aRangeOffset) {
        window.setTargetOriginal.apply(this, arguments);
        this.shouldDisplay = true;
      };
    };
  }
, onUntrack: function(window) {
    if (window.location.href == "chrome://browser/content/browser.xul") {
      // In case we were called because the extension is uninstalled - restore
      // original window.nsContextMenu.prototype.setTarget function
      window.nsContextMenu.prototype.setTarget = window.setTargetOriginal;
    };
  }
});

不幸的是,这仍然没有显示禁用输入的上下文菜单,但这对我来说不是一个显示停止器。

非常感谢

4

1 回答 1

2

可以在此处查看此扩展中的重要代码。它非常简单——它替换nsContextMenu.prototype.setTarget了每个浏览器窗口中的功能,并确保它shouldDisplay为表单控件设置了标志。

将其转换为附加 SDK 的唯一问题是高级模块无法让您直接访问浏览器窗口。您必须使用已弃用的window-utils模块。像这样的东西应该工作:

var {WindowTracker} = require("sdk/deprecated/window-utils");
var tracker = WindowTracker({
  onTrack: function(window)
  {
    if (window.location.href == "chrome://browser/content/browser.xul")
    {
      // This is a browser window, replace
      // window.nsContextMenu.prototype.setTarget function
    }
  },

  onUntrack: function(window)
  {
    if (window.location.href == "chrome://browser/content/browser.xul")
    {
      // In case we were called because the extension is uninstalled - restore
      // original window.nsContextMenu.prototype.setTarget function
    }
  }
});

请注意,WindowTracker它应该在未来的一些 SDK 版本中被替换。另外,供参考:nsContextMenu实施

于 2012-09-07T07:44:33.300 回答