Javascript Chrome扩展中的突然错误:“0”;无法在初始化之前访问“;
在Chrome extension中,为了捕获激活或更新的选项卡并从中获取url,我使用了如下结构Javascript Chrome扩展中的突然错误:“0”;无法在初始化之前访问“;,javascript,google-chrome-extension,initialization,Javascript,Google Chrome Extension,Initialization,在Chrome extension中,为了捕获激活或更新的选项卡并从中获取url,我使用了如下结构 chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { if (changeInfo.url) run(tab); }); chrome.tabs.onActivated.addListener(info => { chrome.tabs.get(info.tabId, run); }); co
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()
的侦听器之前,将声明放在顶部
尝试将变量声明放在顶部代码>到顶部<代码>似乎工作代码>。非常感谢。您能否简单地解释一下,为什么错误不存在,然后上升,然后将变量移到顶部修复了它?调用
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;