Подтвердить что ты не робот

Как получить элемент, в котором выполнено контекстное меню

Я пытаюсь написать расширение google chrome, где я использую контекстное меню. Это контекстное меню доступно только для редактируемых элементов (например, входных текстов). Когда кликнут и выполняется контекстное меню, я хотел бы получить в функции обратного вызова элемент (входной текст), на котором было выполнено контекстное меню, чтобы обновить значение, связанное с этим входным текстом.

Вот скелет моего расширения:

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?

4b9b3361

Ответ 1

Вы можете добавить контент script с помощью mousedown прослушивателя событий и элемента сохранения, который был нажат:

контент 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;
    });
}