Ответ на обработку ошибок: Ошибка типа: Не удается прочитать свойство «идентификатор» неопределенного

#javascript #google-chrome-extension

Вопрос:

Я пытаюсь создать расширение chrome, но по какой-то причине эта ошибка продолжает происходить. Что я пытаюсь сделать, так это то, что я хочу перейти на последнюю открытую вкладку и выполнить в ней сценарий. Кто-нибудь, пожалуйста, может мне помочь?

Вот мой background.js:

 function executeScript(){
        chrome.tabs.query({}, function(tabs){
            var i=0;
            while (tabs[i]) {
                i  ;
            };
            chrome.tabs.update(tabs[i].id, {highlated: true});
            document.getElementById('info').innerHTML = i;
            chrome.scripting.executeScript(
            {
                target:{tabId: tabs[i].id},
                function: codeToExecute,
            });
        })
    }
    setTimeout(executeScript, 500);
 

И вот мой манифест.json:

 {
    "name": "Name of extension",
    "description": "Coded by furtuna with JS and ♥",
    "version": "1.0",
    "manifest_version": 3,
    "background": {
        "script": "files/background.js"
    },
    "permissions": [
        "tabs",
        "storage",
        "scripting"
    ],
    "host_permissions": [
        "http://*/*",
        "https://*/*"
    ],
    "action": {
        "default_popup": "files/main.html"
    }
}
 

Изображение с ошибкой

Комментарии:

1. ну, вы обращаетесь к одному существующему в прошлом индексу. Вы зацикливаетесь до тех пор, пока не найдете никаких вкладок. Таким образом, я буду индексом, в котором вкладка не существует.

2. Нет. Я проверил и пересчитал вкладки. Значение » я » — это количество открытых мной вкладок.

3. Да, это количество, но индексы начинаются с НУЛЯ, так что, опять же, вы получаете доступ к одному больше, чем у вас есть

Ответ №1:

обратите внимание, что ваш цикл while остановится, когда в индексе i не будет вкладки. который равен длине массива вкладок. не забывайте, что индексы массива начинаются с 0, поэтому последним элементом будет длина массива минус 1.

поэтому, когда вы попытаетесь получить вкладки[i], вы получите неопределенное значение. и «undefined.id» создает исключение.

если ваша цель состоит в том, чтобы получить доступ к идентификатору последнего элемента, я бы посоветовал вам поступить так:

 tabs[tabs.length - 1].id