Как создать элементы подменю контекста расширения Chrome из массива строк - PullRequest
1 голос
/ 22 апреля 2019

Я бы хотел, чтобы пользователь мог ввести строку и добавить ее в массив, который я бы сохранил в localStorage. Затем я хотел бы добавить запись для каждой из этих строк в виде элемента контекстного меню, вызываемого правой кнопкой мыши.

Я могу установить и получить массив строк в порядке, в popup.html есть текстовое поле, которое позволяет вводить данные, и массив отлично отображается на странице popup.html. Они могут щелкнуть ссылку, чтобы удалить строку, если они хотят, чтобы все работало нормально. Моя проблема возникает, когда пришло время создавать элементы подменю. Я представляю решение для цикла, но я не уверен, как chrome.contextMenus.create будет работать. Я с нетерпением жду услышать ваши идеи. Большое спасибо!


// Here is an example of how I currently define a parent and three submenu items:

var parent = chrome.contextMenus.create({ "title": "Comment Replies:", "contexts": contexts });
    var child1 = chrome.contextMenus.create({ "title": "One!", "parentId": parent, "id": "I am number 1!", "contexts": contexts, "onclick": childFunction });
    var child2 = chrome.contextMenus.create({ "title": "Two!", "parentId": parent, "id": "I am number 2!", "contexts": contexts, "onclick": childFunction });
    var child3 = chrome.contextMenus.create({ "title": "Three!", "parentId": parent, "id": "I am number 3!", "contexts": contexts, "onclick": childFunction });

// Here is the onclick function:

function childFunction(info, tab) {
  console.log(info, tab);
  chrome.tabs.sendMessage(tab.id, { "newValue": info.menuItemId }, handleTheThrownError);
}

Итак, я хотел бы взять мой массив строк и просмотреть их для создания этих пунктов меню. Похоже на что-то вроде этого:

// Get the array from localStorage:

var myStringArray = JSON.parse(localStorage.getItem('theArray'));

// Loop to generate menu items:

for (var i = 0; i < myStringArray.length; i++){
        // Get the first word of the string as an idea of something to use 
        var myWords = myStringArray[i].split(" ");
        var myFirstWord = myWords[0];
        var <someUniqueValue> = chrome.contextMenus.create({ "title": myFirstWord, "parentId": parent, "id": myStringArray[i], "contexts": contexts, "onclick": childFunction });;
} 

Это выполнимо? Заранее спасибо!

1 Ответ

0 голосов
/ 22 апреля 2019

Я на самом деле решил эту проблему, вот как это получилось:

var myInputStrings = getArrayInLocalStorage('theArray');

for (var i = 0; i < myInputStrings.length; i++) {
    var myWords = myInputStrings[i].split(" ");
    var myFirstWord = myWords[0];  
    chrome.contextMenus.create({ "title": myFirstWord, "parentId": parent, "id": myInputStrings[i], "contexts": contexts, "onclick": childFunction });
}

function childFunction(info, tab) {
  console.log(info, tab);
  chrome.tabs.sendMessage(tab.id, { "newValue": info.menuItemId }, handleTheThrownError);
}

function handleTheThrownError() {
    if (chrome.runtime.lastError) {
        console.log("Whoops.. " + chrome.runtime.lastError.message);
    } else {
        // No errors, you can use entry
    }
}

Спасибо!

...