3 Stimmen

Wie erhalte ich das Kontextmenü "oncreate" Event

Ich schreibe eine Chrome-Erweiterung. Diese Erweiterung soll Elemente zum Chrome-Kontextmenü hinzufügen, wenn ein Text ausgewählt wird. Dies soll jedes Mal dynamisch geschehen, wenn das Kontextmenü geöffnet wird.

Wie auf diesem Bild:

http://imgur.com/pJ5Fp

Das Problem:

Ich kann kein Ereignis finden, das beim Öffnen des Kontextmenüs ausgelöst wird (und funktioniert). Das folgende Codebeispiel funktioniert nicht.

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

Es ist auch nicht möglich, das Hinzufügen von dynamischen Posten vom "Test"-Posten aus anzustoßen:

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

Vielen Dank für Ihre Hilfe!

Update (wie es jetzt funktioniert):

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({}); 
            });
...

1voto

Boris Smus Punkte 7882

Haben Sie versucht, das Rechtsklick-Ereignis zu verfolgen? Die Chrome-Erweiterung Kontextmenü Die APIs befassen sich hauptsächlich mit Klicks auf die neuen Kontextmenüeinträge.

1voto

Flak DiNenno Punkte 2021

UPDATE: contextMenu onCreate Veranstaltung


Es handelt sich dabei weniger um ein offizielles Ereignis als vielmehr um einen einfachen asynchronen Rückruf, der in die Signatur der Methode chrome.extension.create() eingebaut ist:

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

Parameter:

  1. ERFORDERLICH : an objet stellvertretend für optionale createProperties . Alle Eigenschaften sind optional aber, die createProperties Objekt selbst ist erforderlich als ersten Parameter für die Funktion create() Methode. Wenn Sie also nicht eine benutzerdefinierte Optionen/Eigenschaften geben Sie einfach ein leeres Objekt an {}
  2. OPTIONAL : a fonction die es aufruft, wenn die create() Methode vervollständigt .

Rückgabewert:

  1. Entweder:
    • eine automatisch generierte Ganzzahl wenn Sie nicht eine id Eigenschaft in der createProperties Objektparameter beim Aufruf der Methode.
    • a String die den generatedId des Kontextmenüs/Menüeintrags. Eine Zeichenkette wird nur zurückgegeben, wenn Sie eine in der createProperties Objektparameter, wenn Sie die Funktion create() Methode, und wenn erfolgreich erstellt, die String die Sie geliefert haben, ist die EXAKTER WERT die zurückgegeben wird.

Die neuesten Dokumente für die chrome.contextMenus.create API finden Sie hier:


.

In Ihrem Fall/Beispiel sollten Sie Ihren Code wie folgt ändern:

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()
);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X