部队上下文菜单中出现的形式输入(Force context menu to appear for f

2019-09-22 04:41发布

我试图建立一个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/其中考虑到它是“专门创建来演示如何做到这一点”是非常令人沮丧的。

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

**更新**

我添加一个文件下面的代码,从主要要求,似乎这样的伎俩。

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;
    };
  }
});

不幸的是这仍然没有提出来供残疾人输入上下文菜单,但是这是不是表明,塞我。

非常感谢

Answer 1:

代码在此扩展的重要棋子可以看出这里 。 这是非常简单-它取代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实施



文章来源: Force context menu to appear for form inputs