我写了Chrome扩展程序。如果选择了文字,此扩展程序应将项目添加到Chrome上下文菜单中。这应该在每次打开contextmenu时动态发生。
如上图所示:
如果上下文菜单打开,我找不到任何触发(并且有效)的事件。以下代码示例不起作用。
window.addEventListener('contextmenu', function(){ DynamicMenu.generateMenu(window.getSelection()); });
也无法从“测试”项目中触发添加动态项目:
chrome.contextMenus.create( { "title": "test", "contexts" :["selection"], "onclick" : DynamicMenu.generateMenu });
感谢您的帮助!
更新(现在如何运作):
清单:
...
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["document_event.js"],
"run_at" : "document_idle"
}
],
...
document_event.js:
window.addEventListener('mousedown', function(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
if(rightclick){
var searchText = window.getSelection().toString();
chrome.extension.sendRequest({search: searchText}, function(response) {
...
});
}
});
content.js
...
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
var a = request.search;
...
sendResponse({});
});
...
答案 0 :(得分:1)
您是否尝试过跟踪右键单击事件? chrome扩展程序context menu API主要处理新上下文菜单项的点击次数。
答案 1 :(得分:1)
onCreate
事件它本身不是官方事件,因为它是chrome.extension.create()方法签名中内置的简单异步回调:
[ integer|string
] chrome.contextMenus.create(
object
createProps,
function
cb)
<强>参数:
createProperties
的对象。所有属性都是可选,但createProperties
对象本身 required 是create()
方法的第一个参数。因此,如果您不想使用自定义选项/属性,只需提供一个空对象{}
create()
方法完成时回调。 返回值
id
对象参数中提供createProperties
属性,则generatedId
。只有在您调用createProperties
方法时在create()
对象参数中提供了一个字符串,并且成功 字符串时,才会返回字符串您提供的将是返回的 EXACT VALUE 。chrome.contextMenus.create API的最新文档位于:
var gId; //the id that is generated if the menu is created successfully
gId = chrome.contextMenus.create(
{//start createProperties
"title": "test",
"contexts" :["selection"],
"onclick" : DynamicMenu.generateMenu
},//end createProperties
function cmItmCreated_handler(){ //your callback (create event, if you will)
if (typeof chrome.runtime.lastError === "undefined") {
console.log("context menu/item created. 'gId' var contains generated id");
}
else {
console.error(chrome.runtime.lastError);
}
}//end function cmItmCreated_handler()
);