【问题标题】:How do I know which element was clicked in context menus?我如何知道在上下文菜单中单击了哪个元素?
【发布时间】:2015-05-10 11:24:37
【问题描述】:

我们为 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"

【问题讨论】:

标签: javascript jquery google-chrome-extension


【解决方案1】:

我所知道的最好的解决方法之一是遵循thread 中给出的建议,使用content scripts 在目标页面中为“上下文菜单”事件注入一个侦听器。

【讨论】:

  • 这符合仅链接的答案。请在此处包含建议的相关部分,您的摘要太短。
  • Relevant sn-p: "use document.addEventListener("contextmenu", function...) 从内容脚本。"
【解决方案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];
}

【讨论】:

  • 你误解了这个问题。问题不是找出单击了哪个菜单项,而是找出调用上下文菜单的 HTML 元素是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多