Google chrome extension chrome扩展上下文菜单,如何仅在没有选择时显示菜单项?
我想做的是:Google chrome extension chrome扩展上下文菜单,如何仅在没有选择时显示菜单项?,google-chrome-extension,contextmenu,Google Chrome Extension,Contextmenu,我想做的是: var all = chrome.contextMenus.create ({ "title": "A", "contexts":["page"], "onclick": doA }); var selection = chrome.contextMenus.create ({ "title": "B", "contexts":["selection"], "onclick": doB }); document.addEventL
var all = chrome.contextMenus.create
({
"title": "A",
"contexts":["page"],
"onclick": doA
});
var selection = chrome.contextMenus.create
({
"title": "B",
"contexts":["selection"],
"onclick": doB
});
document.addEventListener("mousedown", function(event){
//right click
if(event.button == 2) {
if(window.getSelection().toString()) {
chrome.extension.sendRequest({cmd: "createSelectionMenu"});
} else {
chrome.extension.sendRequest({cmd: "createRegularMenu"});
}
}
}, true);
如果用户未选择任何内容,则显示菜单项A
如果用户选择了某项内容,则显示菜单项B
到目前为止,我能得到的是:
var all = chrome.contextMenus.create
({
"title": "A",
"contexts":["page"],
"onclick": doA
});
var selection = chrome.contextMenus.create
({
"title": "B",
"contexts":["selection"],
"onclick": doB
});
document.addEventListener("mousedown", function(event){
//right click
if(event.button == 2) {
if(window.getSelection().toString()) {
chrome.extension.sendRequest({cmd: "createSelectionMenu"});
} else {
chrome.extension.sendRequest({cmd: "createRegularMenu"});
}
}
}, true);
如果用户未选择任何内容,则显示菜单项A
如果用户选择了某个内容,则同时显示A和B
我想知道:
当有选择时,如何使项目A消失
非常感谢
下面是我的代码:
var all = chrome.contextMenus.create
({
"title": "A",
"contexts":["page"],
"onclick": doA
});
var selection = chrome.contextMenus.create
({
"title": "B",
"contexts":["selection"],
"onclick": doB
});
document.addEventListener("mousedown", function(event){
//right click
if(event.button == 2) {
if(window.getSelection().toString()) {
chrome.extension.sendRequest({cmd: "createSelectionMenu"});
} else {
chrome.extension.sendRequest({cmd: "createRegularMenu"});
}
}
}, true);
您需要向每个页面注入内容脚本,以检查
mousedown
事件(在显示菜单之前)页面上是否有选择,然后向后台页面发送命令以创建相应的菜单项
content\u script.js:
var all = chrome.contextMenus.create
({
"title": "A",
"contexts":["page"],
"onclick": doA
});
var selection = chrome.contextMenus.create
({
"title": "B",
"contexts":["selection"],
"onclick": doB
});
document.addEventListener("mousedown", function(event){
//right click
if(event.button == 2) {
if(window.getSelection().toString()) {
chrome.extension.sendRequest({cmd: "createSelectionMenu"});
} else {
chrome.extension.sendRequest({cmd: "createRegularMenu"});
}
}
}, true);
background.html
chrome.extension.onRequest.addListener(function(request) {
if(request.cmd == "createSelectionMenu") {
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create({
"title": "B",
"contexts":["selection"],
"onclick": doB
});
});
} else if(request.cmd == "createRegularMenu") {
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create({
"title": "A",
"contexts":["page"],
"onclick": doA
});
});
}
});
也许这是一个bug,或者在OP最初提出这个问题时功能有所不同(2011年6月17日);但是今天,OP的代码完全按照预期工作,只需在她的
chrome.contextMenus.create()
调用中使用contexts
参数,就像她写的那样。谢谢。我尝试了你的代码,但没有出现上下文菜单。然后我又改回了我原来的代码,它奇迹般地按照我的意愿工作。我不明白为什么。我会在另一台电脑上试试。非常感谢你。