如何在Chrome扩展程序中动态地向上下文菜单添加选项?

时间:2016-07-09 08:06:03

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

我正在制作一个扩展程序,客户端在扩展程序中生成一些数据并将其保存在 localStorage 中的对象数组中,如下所示:

var list = [{},{newly added object}];
localStorage.setItem("data", JSON.stringify(links));

当客户端保存一些数据时,我想在Chrome的上下文菜单中显示新添加的对象。如果数组中有这么多对象,我每次写这个都很困难:

chrome.contextMenus.create({
    id: "****",
    title: "***",
    contexts: ["all"]
});

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    if (info.menuItemId == "some-id") {
        // do something 
}

});

我该怎么做?任何有用的建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

  1. 每次拨打localStorage.setItem时,您都可以使用类似Message Passing的内容来告诉后台页面更新上下文菜单的时间。然后,您可以使用chrome.contextMenus.createchrome.contextMenus.update更新上下文菜单。

    chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
        chrome.contextMenus.create({
             id: "****",
             title: "***",
             contexts: ["all"]
        });
    });
    
  2. 您还可以通过内容脚本和背景页面之间共享的chrome.storage.local.set保存用户数据,然后您可以在backgorund页面中注册chrome.storage.onChanged的事件处理程序,并更新上下文菜单处理程序内部。

    chrome.storage.onChanged.addListener(function(changes, areaName) {
        chrome.contextMenus.create({
            id: "****",
            title: "***",
            contexts: ["all"]
        });
    });