2015-03-09 4 views
1

Мы разрабатываем расширения для 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)); 
    } 
}); 

Но мне нужно знать, какой элемент пользователь нажал на, и info и tab не содержат элемент. Как узнать, какой элемент пользователь нажал? Я хотел бы иметь объект jQuery, содержащий этот элемент.

Объект info содержит следующие атрибуты:

"editable": true 
"menuItemId" 
"pageUrl" 
+2

См «подзадача 1» в https://stackoverflow.com/ a/28198957/938089 –

ответ

3

Один из лучших обходных путей я знаю, это следовать советам в этой thread использовать content scripts, чтобы ввести слушатель в целевой странице для " contextmenu ".

+1

Это соответствует как ответ только для ссылок. Пожалуйста, включите соответствующие части рекомендаций здесь, ваше резюме слишком короткое. – Xan

+0

Соответствующий фрагмент: «используйте 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]; 
} 
+0

Вы неправильно поняли вопрос. Вопрос не в том, какой элемент меню был нажат, но что такое элемент HTML, на который было вызвано контекстное меню. – Xan

Смежные вопросы