Элементы контекста сохраняются между перезагрузками расширений - что-то не очень очевидное.
Итак, вы получаете это, когда этот код выполняется во второй раз.
Обычный шаблон - «очистить, затем зарегистрировать»:
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create(contextMenuItem);
// Add more
});
Если вы используете страницу событий (persistent: false
фоновая страница), вы, вероятно, не захотите выполнять ее каждый раз, когда страница просыпается; оберните его в chrome.runtime.onStartup
или даже chrome.runtime.onInstalled
(чтобы зарегистрировать один раз для обновления).