在 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/