首页  >  文章  >  web前端  >  为什么我的 Chrome 扩展程序的选项卡信息显示为空且没有断点?

为什么我的 Chrome 扩展程序的选项卡信息显示为空且没有断点?

Barbara Streisand
Barbara Streisand原创
2024-10-31 16:49:02594浏览

Why Does My Chrome Extension's Tab Information Appear Empty Without Breakpoints?

异步函数调用:了解检索 Chrome 选项卡信息时的延迟

在开发 Chrome 扩展程序时,您遇到了一个问题,即通过 chrome.tabs.query 获取的结果是当代码在没有断点的情况下运行时不可用。为了分析这个问题,我们将深入研究 chrome.tabs.query 函数的异步性质。

异步函数调用

异步函数,如 chrome.tabs.query,在以下位置执行其代码:稍后的时间点,独立于主执行流程。在您的代码片段中:

// Initialize an empty array
var fourmTabs = new Array();
// Initiate asynchronous `chrome.tabs.query` call
chrome.tabs.query({}, function (tabs) {
    // Iterate over returned tabs
    for (var i = 0; i < tabs.length; i++) {
        // Store tabs in array
        fourmTabs[i] = tabs[i];
    }
});

当此代码运行时,chrome.tabs.query 调用将执行并发起请求,但 JavaScript 执行会继续到下一行。作为 chrome.tabs.query 的第二个参数提供的回调函数不会立即调用。

// Print tab URLs (before callback has been called)
for (var i = 0; i < fourmTabs.length; i++) {
    if (fourmTabs[i] != null)
        window.console.log(fourmTabs[i].url);
    else {
        window.console.log("??" + i);
    }
}

在上面的代码中,当循环执行时,fourmTabs 数组仍然为空,因为回调函数有尚未被调用。因此,控制台会输出“??”对于每个选项卡。

使用断点,代码的执行会暂停,允许回调函数执行并更新 fourmTabs 数组。这确保第二个循环可以访问更新的选项卡信息并正确打印 URL。

解决问题

要解决此问题并确保在代码运行时选项卡可用断点,将第二个循环移至 chrome.tabs.query 的回调函数内。这确保了循环在调用回调后执行:

// Initialize an empty array
var fourmTabs = new Array();
// Initiate asynchronous `chrome.tabs.query` call
chrome.tabs.query({}, function (tabs) {
    // Update `fourmTabs` array
    for (var i = 0; i < tabs.length; i++) {
        fourmTabs[i] = tabs[i];
    }
    // Print tab URLs (after callback has been called)
    for (var i = 0; i < fourmTabs.length; i++) {
        if (fourmTabs[i] != null)
            window.console.log(fourmTabs[i].url);
        else {
            window.console.log("??" + i);
        }
    }
});

通过此修改,代码将正确运行,而不需要断点,因为第二个循环仅在 fourmTabs 数组之后执行已通过回调函数更新。

以上是为什么我的 Chrome 扩展程序的选项卡信息显示为空且没有断点?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn