如何检索已执行上下文菜单的元素

时间:2011-10-09 13:06:32

标签: javascript dom google-chrome-extension contextmenu

我正在尝试编写一个google chrome扩展程序,我在其中使用了contextmenu。此上下文菜单仅适用于可编辑元素(例如输入文本)。单击并执行contextmenu时,我想在回调函数中检索已执行contextmenu的元素(输入文本),以便更新与此输入文本关联的值。

这是我的扩展的骨架:

function mycallback(info, tab) {
  // missing part that refers to the question:
  // how to retrieve elt which is assumed to be 
  // the element on which the contextMenu has been executed ?
  elt.value = "my new value"
}

var id = chrome.contextMenus.create({
        "title": "Click me",
        "contexts": ["editable"],
        "onclick": mycallback
    });

与mycallback函数关联的参数不包含用于检索右键单击元素的有用信息。这似乎是一个已知问题(http://code.google.com/p/chromium/issues/detail?id=39507),但几个月后没有任何进展。有人知道解决方法:没有jquery和/或jquery吗?

1 个答案:

答案 0 :(得分:49)

您可以使用已点击的mousedown事件侦听器和存储元素注入内容脚本:

content script.js

//content script
var clickedEl = null;

document.addEventListener("mousedown", function(event){
    //right click
    if(event.button == 2) { 
        clickedEl = event.target;
    }
}, true);

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if(request == "getClickedEl") {
        sendResponse({value: clickedEl.value});
    }
});

background.js

//background
function mycallback(info, tab) {
    chrome.tabs.sendMessage(tab.id, "getClickedEl", function(clickedEl) {
        elt.value = clickedEl.value;
    });
}