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

use*_*r25 3 javascript google-chrome-extension

不久前,我可以在 Google Chrome 扩展程序中为上下文菜单保存创建项目的 ID:

背景.js:

var myItem;

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

但是现在当我首先打开 Chrome 时,它​​说:

运行 contextMenus.create 时未选中的 runtime.lastError:无法创建具有重复 id MyItem 的项目

(来自调试控制台)

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

那么现在我应该使用chrome.storage.local.get还是set保存我的上下文菜单项的 ID?

更新:

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

   "background": {
      "scripts": [ "background.js" ]
   },
Run Code Online (Sandbox Code Playgroud)

已删除,现在可以正常使用[已解决]

Ben*_*enG 7

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

虽然另一种选择是removeAll在创建之前:-

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

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

  • `removeAll` 是异步的。得把那些锁起来。 (2认同)

Bla*_*ory 5

您应该只在事件中创建菜单项chrome.runtime.onInstalled

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