javascript - Chrome扩展程序突然出现错误: "cannot access before initialization"

标签 javascript google-chrome-extension initialization

在 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,无论是在选项卡激活时,还是在选项卡更新(刷新)时都没有。查看扩展后端,我意识到一个错误,该错误从未存在过:

初始化前无法访问“processingTabId”

这些代码行已被标记:

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

有人知道这个错误意味着什么、如何修复以及为什么突然发生吗?

最佳答案

您需要在调用使用它的 run() 函数之前初始化 processingTabId。因此,在添加调用 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;

关于javascript - Chrome扩展程序突然出现错误: "cannot access before initialization",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60660384/

相关文章:

javascript - 最初搜索视频后无法快退或前进?

chrome 插件中的 Javascript 有语法错误

javascript - 通过 chrome 扩展程序检测何时发生自动填充

c - 在 C 中初始化二维字符数组

javascript - Chrome 不显示 Javascript 警告框

javascript - 重置或清除 Cubism 图表

javascript - gRaphael - 动画折线图失败

javascript - Chrome.i18n 是否有标准格式的 message.json

arrays - 如何在awk中初始化数组的数组?

c - 在 C 语言中,为什么我初始化为 0 的 int 变量被报告为 "nm"未初始化?