检查项目是否已在上下文菜单中

时间:2016-05-03 09:14:15

标签: javascript google-chrome-extension

前一段时间我可以在Google Chrome扩展程序中保存上下文菜单中已创建项目的ID:

background.js:

var myItem;

if (myItem !== "MyItem") {
    myItem = chrome.contextMenus.create({
        title: "My item",
        id: 'MyItem',
        contexts: ["page"]
    });
}

但是现在我首先打开Chrome时会说:

  

运行contextMenus.create时未经检查的runtime.lastError:不能   创建具有重复ID MyItem

的项目

(来自调试控制台)

当我关闭Chrome时,它不再记得我的变量“myItem”(它的数据)。它只会在Chrome打开时记住。

那我现在应该使用chrome.storage.local.getset来保存我的上下文菜单项的ID吗?

更新:

问题是背景清单中的"persistent": false

   "background": {
      "scripts": [ "background.js" ]
   },

删除它&现在它正常工作 [已解决]

3 个答案:

答案 0 :(得分:2)

本地存储绝对是一种选择。

虽然在创建之前另一个选项是removeAll: -

chrome.contextMenus.removeAll(function() {
  chrome.contextMenus.create({
    title: "My item",
    id: 'MyItem',
    contexts: ["page"]
  });
});

当我使用动态子菜单等时,我使用了这种方式,并且发现重新创建整个菜单比尝试确定应添加/删除哪些选项更容易。

答案 1 :(得分:1)

请注意,删除 - 然后添加上下文菜单项始终是安全的:

// Or removeAll and create all
chrome.contextMenus.remove('MyItem', function() {
  chrome.contextMenus.create({
    title: "My item",
    id: 'MyItem',
    contexts: ["page"]
  });
});

无需存储此操作的结果;并且您不需要经常调用它,因为chrome会在重新启动之间保留上下文菜单。

拥有chrome.runtime.onInstalled的监听者并执行此操作除了one corner case之外,其他方法都会很好。

答案 2 :(得分:-1)

您仅应在chrome.runtime.onInstalled事件中创建菜单项。

另请参阅:https://developer.chrome.com/extensions/background_pages#listeners