2

我正在尝试为我的上下文菜单添加子项,但由于某种原因它对我不起作用。这是我的代码:

var parent1 = chrome.contextMenus.create({"title": "Trigger Rank", "contexts":["link"]});

var child1 = chrome.contextMenus.create
(
    {"title": "Rank 1", "parentId": parent1, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 2", "parentId": parent1, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 3", "parentId": parent1, "onclick": genericOnClick}
);



var parent2 = chrome.contextMenus.create({"title": "Target Rank", "contexts":["link"]});
var child1 = chrome.contextMenus.create
(
    {"title": "Rank 1", "parentId": parent2, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 2", "parentId": parent2, "onclick": genericOnClick}
);
var child3 = chrome.contextMenus.create
(
    {"title": "Rank 3", "parentId": parent2, "onclick": genericOnClick}
);

看起来很简单,但这是我的第一个 chrome 扩展,也是第一次用 javascript 编写。所以可能是我错过了一些东西。

目前,当右键单击链接时,只显示父母(而不是孩子)。

如果我的问题太“新手”,请提前致谢。:)

4

2 回答 2

2

您的父项已contexts设置为["link"],但您的子项的默认contexts值为["page"]。所以:

  • 当您右键单击链接时,父母会出现,但孩子不会,因为他们没有设置为显示在链接上。
  • 当您右键单击链接以外的其他内容时,父母不会出现,因此孩子也不会出现。

您必须将孩子的contexts价值观设置为与父母的价值观相匹配["link"]

于 2013-02-11T19:27:28.383 回答
0

我刚刚遇到了一个类似但不完全相同的案例。

我正在创建一个需要支持多个上下文(链接、页面、选择)的菜单,并且子菜单仅显示在页面中。

上面的答案是正确的,因为您必须定义上下文,因为它是创建的可选参数。即使我仔细阅读了文档,这也是一个痛苦的发现:http: //developer.chrome.com/extensions/contextMenus.html#method-create

上下文(“all”、“page”、“frame”、“selection”、“link”、“editable”、“image”、“video”、“audio”或“launcher”的可选枚举数组)此菜单项将出现的上下文。如果未指定,则默认为 ['page']。指定 ['all'] 等效于除 'launcher' 之外的所有其他上下文的组合。“启动器”上下文仅由应用程序支持,用于将菜单项添加到单击启动器/任务栏/停靠/等中的应用程序图标时出现的上下文菜单。不同的平台可能会限制启动器上下文菜单中实际支持的内容。

要明确回答,这是您的解决方案代码:

var child1 = chrome.contextMenus.create
(
    {"title": "Rank 1", "parentId": parent1, "onclick": genericOnClick, "contexts":["link"]}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 2", "parentId": parent1, "onclick": genericOnClick, "contexts":["link"]}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 3", "parentId": parent1, "onclick": genericOnClick, "contexts":["link"]}
);

在我自己的情况下,我支持多个上下文并且所有都需要在创建中考虑(例如“上下文”:[“页面”,“链接”,“选择”])

于 2013-08-12T23:47:37.250 回答