如何获取上下文菜单“oncreate”事件

时间:2011-12-08 22:12:22

标签: google-chrome google-chrome-extension

我写了Chrome扩展程序。如果选择了文字,此扩展程序应将项目添加到Chrome上下文菜单中。这应该在每次打开contextmenu时动态发生。

如上图所示:

http://imgur.com/pJ5Fp

问题:

如果上下文菜单打开,我找不到任何触发(并且有效)的事件。以下代码示例不起作用。

  

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

也无法从“测试”项目中触发添加动态项目:

  

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

感谢您的帮助!

更新(现在如何运作):

清单:

...
     "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 个答案:

答案 0 :(得分:1)

您是否尝试过跟踪右键单击事件? chrome扩展程序context menu API主要处理新上下文菜单项的点击次数。

答案 1 :(得分:1)

更新:contextMenu onCreate事件

它本身不是官方事件,因为它是chrome.extension.create()方法签名中内置的简单异步回调:

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

<强>参数:

  1. REQUIRED :表示可选createProperties对象。所有属性都是可选,但createProperties对象本身 required create()方法的第一个参数。因此,如果您不想使用自定义选项/属性,只需提供一个空对象{}
  2. 可选功能,在create()方法完成时回调。
  3. 返回值

    1. 或者:
        如果在调用方法时未在id对象参数中提供createProperties属性,则
      • 自动生成的整数
      • 字符串,表示上下文菜单/菜单项的generatedId。只有在您调用createProperties方法时在create()对象参数中提供了一个字符串,并且成功 字符串时,才会返回字符串您提供的将是返回的 EXACT VALUE
    2. chrome.contextMenus.create API的最新文档位于:


      在你的case / example中,你应该修改你的代码:

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