Chrome扩展程序开发:chrome.contextMenus为null

时间:2014-02-17 00:56:58

标签: javascript google-chrome google-chrome-extension google-chrome-devtools

我正在为自己开发Google Chrome扩展程序。它在每个页面上的图像的右键单击上下文菜单中添加了一个额外的菜单项。

目前,我的扩展程序没有问题,但是当我检查控制台日志时,我看到了这个错误日志:

  

未捕获的TypeError:无法调用未定义的方法'create'

在代码行上:

var id = chrome.contextMenus.create({
        "title": title, "contexts": [context],
        "onclick": genericOnClick
    });

问题是,chrome.contextMenus来自 null 。我发现它可能与权限有关,但我的manifest.json文件中有contextmenus权限。这是清单文件中的权限块:

  "permissions": [
    "contextMenus",
    "notifications",
    "<all_urls>"
  ],

除此之外,我的扩展功能应该如此。那么为什么我在日志中看到这个错误?如果chrome.contextMenus为空,我应该简单地添加一个空检查以不执行任何操作吗?或者我应该等待它被初始化(我不知道怎么做btw -without在循环中使用旧样式 - )?

以下是导致此错误的代码块:

var contexts = ["image"];
for (var i = 0; i < contexts.length; i++) {
    var context = contexts[i];
    var title = "Do something";

    var id = chrome.contextMenus.create({
        "title": title, "contexts": [context],
        "onclick": genericOnClick
    });
}

function genericOnClick(info, tab) {
    // some stuff
}

我对Javascript不太熟悉。我该如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:13)

chrome.contextMenus在内容脚本中未定义。

您可以使用Chrome控制台进行检查。

您需要在background.js脚本中创建上下文菜单项:

content.js

        var requestData = {"action": "createContextMenuItem"};
        //send request to background script
        chrome.extension.sendRequest(requestData);

background.js:

function onRequest(request, sender, callback){    
   if(request.action == 'createContextMenuItem'){
           var contextItemProperties = {};
           contextItemProperties.title = 'context menu item';
           chrome.contextMenus.create(contextItemProperties);
   }
} 

//subscribe on request from content.js:
chrome.extension.onRequest.addListener(onRequest);

我很惊讶为什么文档没有提到你只能在后台页面创建上下文菜单项。

在更改background.js。

中的代码后,还需要重新加载扩展名