我正在构建Chrome扩展程序,并设置了一个上下文菜单,该菜单将显示并检查用户从扩展程序弹出窗口中的表中选择的项目(图像或文本)。
这是我在 popup.js ' window.onload
中创建上下文菜单的代码:
chrome.contextMenus.removeAll();
chrome.contextMenus.create( {title: "Toggle Selected",
documentUrlPatterns: [ "chrome-extension://*/popup.html"],
contexts:["selection"], onclick: toggleselected} );
这是在上下文菜单onclick
上调用的函数 - 也在 popup.js (简化版)中:
function toggleselected(info, tab)
{
var selection = window.getSelection(),
q0 = document.querySelectorAll("[id^='id0']"),
q1 = document.querySelectorAll("[id^='id1']");
for (var i = 0; i < somearray.length; i++)
{
if (selection.containsNode(q1[i], true))
{
somearray[i].checked = !somearray[i].checked;
q0[i].checked = !q0[i].checked;
}
}
updatesomearrayinfo();
}
这是我的 manifest.json 文件(再次,简化版):
{
"manifest_version": 2,
"name": "Extension Name",
"version": "1.0",
"description": "Random description",
"browser_action":
{
"default_icon":
{
"16": "icon16.png",
"32": "icon32.png",
"48": "icon48.png",
"128": "icon128.png"
},
"default_popup": "popup.html"
},
"background":
{
"scripts": ["somescript.js"],
"persistent": true
},
"permissions": ["contextMenus", "tabs", "downloads", "<all_urls>"]
}
一切正常,上下文菜单会在需要时正确显示...除了它旁边没有扩展程序的自己的图标,但默认的Chrome扩展程序图标(灰色的) 。可以采取哪些措施来纠正这种行为?我的清单中的图标是可以的,其中一个(我相信16x16像素)正确地显示在我的扩展按钮上,除了通常使用chrome.runtime.onInstalled
contextMenus.onClicked.addListener
来自事件页面的整个上下文菜单之外的其他图标{1}}和其他听众(我不愿意使用,因为我特别需要处理来自 popup.js 的变量 - 例如某些阵列和弹出元素的查询),I似乎没有做任何不同于其他扩展或StackOverflow上的答案中的代码示例所做的事情。而且他们都显示了自己的扩展图标,显然没有做任何特别的事情。
编辑:此外,有没有人知道为什么只有当选择包含 more 而不是一个特定项目(在我的情况下是图像)时才会触发选择的上下文菜单?