javascript - Chrome 扩展程序 : query tabs async

标签 javascript google-chrome asynchronous google-chrome-extension

我有两个变量被设置为函数的“返回值”,这些函数是获取选项卡的 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,但是当我从回调外部返回 tab 时,它返回正常,就好像这是一个同步调用一样。我有一个screenshot在调试器中发现这种现象。我正在尽力学习如何处理 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);
}

关于javascript - Chrome 扩展程序 : query tabs async,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20028950/

相关文章:

java - 异步不工作

javascript - 在视频上叠加播放按钮

javascript - 如何排除用标点符号分隔的整个句子?

css - Safari/Chrome 的圆 Angular

google-chrome - GoDoc 标识符搜索浏览器界面

Javascript 函数(异步)在 Mozilla FF 中有效,但在 Chrome 中无效?

C# WPF - 长时间点击按钮操作

javascript - Firefox 中的零星 "SetVariable is not a function"

javascript - 使用 JsRender 从简单数组数据创建行/列布局

Laravel dd() 函数不再显示在 Google Chrome 网络选项卡中如何修复?