Как получить элемент, в котором выполнено контекстное меню
Я пытаюсь написать расширение 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?
Ответы
Ответ 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;
});
}