Chrome 扩展程序:查询标签页异步

Chrome Extension: query tabs async

本文关键字:标签 异步 查询 扩展 程序 Chrome      更新时间:2023-09-26

我有两个变量设置为函数的"返回值",这些函数是获取选项卡的URL,以及对实际选项卡对象的引用,并将它们存储在变量中。我有一些代码:

function init(){
    var url = getUrl();
    var tab = getTab();
}
function getUrl(){
    var tablink;
    chrome.tabs.query({currentWindow: true, active: true},function(tabs){
        tablink = tabs[0].url;
        return tablink;
    });
}
function getTab(){
    var tab;
    chrome.tabs.query({currentWindow: true, active: true},function(tabs){
        tab = tabs[0];
    });
    return tab;
}

为什么 URL 是未定义的,尽管我从回调函数中返回 URL,但当我从回调外部返回选项卡时,它返回正常,就好像这是一个同步调用一样。我在调试器中有这种现象的屏幕截图。我正在尽力学习如何在 chrome 中处理异步方法,但这非常令人困惑。有人可以向我解释这种行为吗?

正如你已经说过的,chrome.tabs.query函数是异步的。因此,您不能依赖 return ,而是必须使用回调。Chrome扩展程序的文档很好地解释了它:http://developer.chrome.com/extensions/overview.html#sync-example

所以在你的情况下,这样的东西可能会起作用(取决于你以后想用什么)。

var url, tab;
function init(){
    chrome.tabs.query({currentWindow: true, active: true},function(tabs){
       url = tabs[0].url;
       tab = tabs[0];
       //Now that we have the data we can proceed and do something with it
       processTab();
    });
}
function processTab(){
    // Use url & tab as you like
    console.log(url);
    console.log(tab);
}