我如何知道在上下文菜单中单击了哪个元素?

时间:2015-03-09 10:27:35

标签: javascript jquery google-chrome-extension

我们为Chrome,Firefox和Safari开发扩展程序。我们想要向我们的扩展添加上下文菜单,这些扩展菜单会在右键单击任何可编辑的表单元素时显示。我尝试向Chrome添加可编辑的上下文菜单:

chrome.contextMenus.create({
    "title": "Test editable menu item",
    "contexts": ["editable"],
    "onclick": function(info, tab) {
        console.log("item " + info.menuItemId + " was clicked");
        console.log("info: " + JSON.stringify(info));
        console.log("tab: " + JSON.stringify(tab));
    }
});

但我需要知道用户点击了哪个元素,infotab不包含该元素。我如何知道用户点击了哪个元素?我想有一个包含该元素的jQuery对象。

info对象包含以下属性:

"editable": true
"menuItemId"
"pageUrl"

2 个答案:

答案 0 :(得分:3)

我所知道的最好的解决方法之一是遵循此thread中给出的建议,使用content scripts在目标页面中为监听器注入' contextmenu'事件。

答案 1 :(得分:-2)

我知道这对你来说已经很晚了,但我在这里回答其他任何谷歌的人。

我的解决方案是在创建的菜单项和业务模型(在本例中为“数据”数组)之间创建映射:

var itemsDic = {};
function onClickHandler(info) {
    alert(itemsDic[info.menuItemId]);
};

for(i in data) {
    var currentItem = chrome.contextMenus.create({
            parentId: item,
            title: data[i].ItemName,
            type: data[i].ItemType,
            contexts: ["editable"],
            onclick : onClickHandler
    });
    itemsDic[currentItem] = data[i];
}