繁体   English   中英

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

[英]Chrome extension development: chrome.contextMenus is null

我正在为自己开发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为null,我应该简单地添加一个空检查来不执行任何chrome.contextMenus吗? 或者我应该等待它被初始化(我不知道怎么做btw -outout在循环时使用旧样式)?

这是导致此错误的代码块:

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不太熟悉。 我该如何解决这个问题?

提前致谢

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中的代码后重新加载扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM