前一段时间我可以在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.get
或set
来保存我的上下文菜单项的ID吗?
更新:
问题是背景清单中的"persistent": false
:
"background": {
"scripts": [ "background.js" ]
},
删除它&现在它正常工作 [已解决]
答案 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