Внезапная ошибка в расширении Chrome: «не удается получить доступ до инициализации» - PullRequest
0 голосов
/ 12 марта 2020

В Chrome расширении, чтобы поймать активированную или обновленную вкладку и получить URL-адрес от них, я использую конструкцию, подобную

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.url) run(tab);
});

chrome.tabs.onActivated.addListener(info => {
    chrome.tabs.get(info.tabId, run);
});

const processingTabId = {};

function run(tab) {
    if (processingTabId[tab.id]) return;
    processingTabId[tab.id] = true;

    let newUrl = new URL(tab.pendingUrl || tab.url)
    currentHost = newUrl.host;

В некоторые дни она работала как чудо, и это расширение использовалось. Но сегодня, без обновления Chrome или какого-либо изменения кода, я внезапно осознаю, что ни при каких обстоятельствах не получаю URL, ни при активации вкладок, ни при обновлении вкладок (refre sh). Заглядывая в расширение внутреннего интерфейса, я обнаружил ошибку, которой никогда не было:

Cannot access 'processingTabId' before initialization

и эти строки кода были помечены:

function run(tab) {
    if (processingTabId[tab.id]) return;

Кто-нибудь знает, что эта ошибка означает, как это исправить и почему это происходит так внезапно?

1 Ответ

1 голос
/ 12 марта 2020

Вам нужно инициализировать processingTabId перед вызовом функции run(), которая ее использует. Поэтому поместите объявление вверху, прежде чем добавлять слушателей, которые вызывают run().

const processingTabId = {};

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.url) run(tab);
});

chrome.tabs.onActivated.addListener(info => {
    chrome.tabs.get(info.tabId, run);
});

function run(tab) {
    if (processingTabId[tab.id]) return;
    processingTabId[tab.id] = true;

    let newUrl = new URL(tab.pendingUrl || tab.url)
    currentHost = newUrl.host;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...