Непроверенный runtime.lastError: не удается создать элемент с повторяющимся идентификатором — мой идентификатор поступает из Firebase

#javascript #firebase #contextmenu

# #javascript #firebase #contextmenu

Вопрос:

Пытаюсь отобразить в моем contextmenu список списков воспроизведения, которые существуют в моей базе данных firebase в реальном времени, чтобы я мог сохранять данные в этом списке воспроизведения. Я могу отображать их для контекстов моей страницы, но не для контекстов изображений или цитат.

Я получаю эту ошибку для идентификатора каждого игрока в консоли:

Непроверенная среда выполнения.lastError: не удается создать элемент с повторяющимся идентификатором -MMqelZvPmCUbuMCxQ42

Как я могу отображать свои плейлисты во всех контекстах, не сталкиваясь с этой ошибкой?

Вот этот код :

 firebase.auth().onAuthStateChanged(function (user) {
  if (user) {
    var uid = auth.currentUser.uid;
    console.log(uid);
    //contextmenu for page CHANGE REPO TO MOST RECENT PLAYLIST -------------
    chrome.contextMenus.create({
      title: "Repo",
      contexts: ["page"],
      onclick: MyGenericClick,
    });
    chrome.contextMenus.create({
      title: "Repo",
      contexts: ["image"],
      onclick: MyImageClick,
    });
    chrome.contextMenus.create({
      title: "Repo",
      contexts: ["selection"],
      onclick: MyQuoteClick,
    });
    //playlist contextmenu from database
    database
      .ref(uid)
      .once("value")
      .then((snapshot) => {
        console.log(snapshot.val());
        snapshot.forEach(function (childSnapshot) {
          // display existing playlists
          chrome.contextMenus.create({
            id: childSnapshot.val().idKey,
            title: childSnapshot.val().name,
            contexts: ["page"],
            onclick: MyPagePlaylistClick,
          });
          chrome.contextMenus.create({
            id: childSnapshot.val().idKey,
            title: childSnapshot.val().name,
            contexts: ["image"],
            onclick: MyImagePlaylistClick,
          });
          chrome.contextMenus.create({
            id: childSnapshot.val().idKey,
            title: childSnapshot.val().name,
            contexts: ["selection"],
            onclick: MySelectionPlaylistClick,
          });
        });
      });
  } else {
    console.log("No user is signed in.");
  }
}); 

Ответ №1:

Не зная точного используемого вами API, я предполагаю, что вам нужно сделать каждый id уникальный вызов в вашей базе данных; в настоящее время вы используете один и тот же childSnapshot.val().idKey для каждой записи. Попробуйте что-то вроде

           chrome.contextMenus.create({
            id: childSnapshot.val().idKey   '-page',
            title: childSnapshot.val().name,
            contexts: ["page"],
            onclick: MyPagePlaylistClick,
          });
          chrome.contextMenus.create({
            id: childSnapshot.val().idKey   '-image',
            title: childSnapshot.val().name,
            contexts: ["image"],
            onclick: MyImagePlaylistClick,
          });
          chrome.contextMenus.create({
            id: childSnapshot.val().idKey   '-selection',
            title: childSnapshot.val().name,
            contexts: ["selection"],
            onclick: MySelectionPlaylistClick,
          });
 

чтобы сделать каждую id запись более уникальной.