Проблема при получении текущих вкладок и URL выбранных вкладок в Chrome API

Я пытаюсь получить URL из всех открытых вкладок и выбранной вкладки с использованием этих двух фрагментов

// For Getting URL of All Opened Tabs
chrome.tabs.getCurrent(function(tabs) {
for (var i = 0; i < tabs.length; i++) {
    console.log(tab.url);
     }
});

// For Getting URL of Selected Tab
chrome.tabs.getSelected(function(tab) {
     console.log(tab.url);
});

но ни один из них не работает. Для получения всех вкладок я получаю эту ошибку:

Ошибка в ответе на tabs.getCurrent: TypeError: Невозможно прочитать свойство 'length' из неопределенного

и для получения выбранной вкладки

не определено

пожалуйста, дайте мне знать, почему это происходит и как я могу это исправить?

1 ответ

chrome.tabs.getSelected был объявлен устаревшим поэтому мы должны использовать tabs.query({active: true}... вместо.

chrome.tabs.getCurrent передает одну вкладку в функцию обратного вызова. Это не "Получение URL всех открытых вкладок", это:

Получает вкладку, из которой выполняется этот вызов скрипта. Может быть неопределенным, если вызывается из контекста без вкладки (например: фоновая страница или всплывающее окно).

Так:

// Write the URL of the current tab to the console
chrome.tabs.getCurrent(tab => console.log(tab.url));

Это требует "activeTab" или же "tabs" разрешение в манифесте. Если есть ошибка, она не выдаст исключение, а заполнит chrome.runtime.lastError,

Я считаю, что легче справляться со всеми обратными вызовами, используя асинхронную библиотеку или оболочку обещаний, такую ​​как chrome-extension-async, Это давайте использовать async / await синтаксис и регулярный try-catch:

try {
    const currentTab = await chrome.tabs.getCurrent();
    console.log(currentTab.url);
}
catch(err) {
    // Handle errors
}

В вашем popup.html вы не можете получить доступ chrome.tabs.getCurrent - вы должны использовать chrome.tabs.query вместо:

async function writeAllTabUrlToConsole() {
    try {
        // Get all the tabs
        const tabs = await chrome.tabs.query({});

        // Write all their URLs to the popup's console
        for(let t of tabs)
            console.log(t.url, t.active);
    }
    catch(err) {
        // Handle errors
    }
}
Другие вопросы по тегам