为除某些网站外的所有网站创建上下文菜单条目

Create context Menu entry for all websites excluding some

本文关键字:网站 上下文 创建 菜单      更新时间:2023-09-26

我正在开发一个带有插件SDK的Firefox插件,我想在除谷歌图像外的所有网站上包含图像的上下文菜单项,为此我将添加不同的上下文菜单项。

var cm = require("sdk/context-menu");
cm.Item({
  label: "LABEL",
  context: [
    cm.URLContext(["*.images.google.*"]),
    cm.SelectorContext("img")
  ],
  contentScript: googleContentScript ,
  onMessage: ...
});
cm.Item({
  label: "LABEL",
  context: [
     cm.URLContext(["*"]),
     cm.SelectorContext("img")
  ],
  contentScript: otherContentScript ,
  onMessage: ...
});

对于第一个URLContext,我想捕获所有谷歌图像,无论TLD (.com, .co)。英国……)。对于第二个,我希望URLContext能够应用于所有不在第一个中的url。

显然这不是目前正在发生的事情。

对于模式,URLSelector的匹配模式有些有限,很难处理。

你必须合理的选择:

  • 您可以在您的内容脚本中实现self.on("context", function() ...)。返回false将使菜单项不显示。

每当要显示上下文菜单时,将在内容脚本中发出一个名为"context"的特殊事件。如果您为此事件注册了一个侦听器函数,并且它返回true,则与侦听器内容脚本关联的菜单项将显示在菜单中。

  • 如果您的目标是Firefox 29+,那么使用PredicateContext可能更容易(维护)并且也产生更好的性能(因为它不需要启动和执行内容脚本)。