Как мне получить контекстное меню "Создать" Событие - PullRequest
2 голосов
/ 09 декабря 2011

Я пишу расширение Chrome. Это расширение должно добавлять элементы в контекстные меню Chrome, если выделен текст. Это должно происходить динамически каждый раз, когда открывается контекстное меню.

Как на этом изображении:

http://imgur.com/pJ5Fp

Проблема:

Я не могу найти событие, которое запускается (и работает), если открывается контекстное меню. Следующий пример кода не работает.

window.addEventListener('contextmenu', function(){ DynamicMenu.generateMenu(window.getSelection()); });

Также невозможно инициировать добавление динамических элементов из «тестового» элемента:

chrome.contextMenus.create( { "title": "test", "contexts" :["selection"], "onclick" : DynamicMenu.generateMenu });

Спасибо за вашу помощь!

Обновление (как это теперь работает):

Manifest:

...
     "content_scripts": [
        {
          "matches": ["http://*/*", "https://*/*"],
          "js": ["document_event.js"],
          "run_at" : "document_idle"
        }
      ],
...

document_event.js:

  window.addEventListener('mousedown',  function(e) { 
        var rightclick; 
        if (!e) var e = window.event; 
        if (e.which) rightclick = (e.which == 3); 
        else if (e.button) rightclick = (e.button == 2); 
        if(rightclick){
            var searchText = window.getSelection().toString();
            chrome.extension.sendRequest({search: searchText}, function(response) {
                ...
            });
        }
    });

content.js

...
    chrome.extension.onRequest.addListener(
              function(request, sender, sendResponse) {
                var a = request.search;
                            ...
                sendResponse({}); 
            });
...

Ответы [ 2 ]

1 голос
/ 08 июля 2014

ОБНОВЛЕНИЕ: contextMenu onCreate Событие

Это менее официальное событие как таковое, поскольку это простой асинхронный обратный вызов, встроенный в сигнатуру метода chrome.extension.create ():

[integer|string] chrome.contextMenus.create(objectcreateProps,functioncb)

Параметры:

  1. REQUIRED : объект , представляющий необязательный createProperties. Все свойства необязательны , но сам объект createProperties является обязательным в качестве первого параметра метода create(). Итак, если вы не хотите использовать пользовательских опций / свойств , просто укажите пустой объект {}
  2. ДОПОЛНИТЕЛЬНО : функция , которую он вызывает, когда метод create() завершает .

Возвращаемое значение:

  1. Либо:
    • автоматически сгенерированное целое число , если вы не указали свойство id в параметре объекта createProperties при вызове метода.
    • a строка , представляющая generatedId элемента контекстного меню / меню. Строка возвращается только в том случае, если вы указали ее в параметре объекта createProperties, когда вызывали метод create(), и , если успешно создан, указанная вами строка будет ТОЧНОЕ ЗНАЧЕНИЕ , которое возвращается.

Последние документы для API chrome.contextMenus.create находятся здесь:

<Ч />

.

В вашем случае / примере вы должны изменить свой код следующим образом:

var gId;  //the id that is generated if the menu is created successfully
gId = chrome.contextMenus.create(
  {//start createProperties
  "title": "test", 
  "contexts" :["selection"],
  "onclick" : DynamicMenu.generateMenu
  },//end createProperties
  function cmItmCreated_handler(){  //your callback (create event, if you will)
    if (typeof chrome.runtime.lastError === "undefined") {
      console.log("context menu/item created.  'gId' var contains generated id");
    }
    else {
      console.error(chrome.runtime.lastError);
    }
  }//end function cmItmCreated_handler()
);  
1 голос
/ 12 декабря 2011

Вы пробовали отслеживать событие правого клика? Расширение chrome контекстное меню API-интерфейсы в основном обрабатывают нажатия на новые пункты контекстного меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...