2013-03-31 34 views
1

在AngularJS应用(Chrome扩展)中,我需要获取当前选项卡的标题和URL,然后才能执行任何有用的操作。这个函数需要一个回调函数,它接收有问题的标签。但是,不是记录选项卡对象,而是在它可用时立即将它传递给模块/服务。我怎样才能做到这一点?与AngularJS异步获取Chrome选项卡

chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { 
    console.log(tabs[0]); 
}); 

chrome.tabs.query()显然没有返回值。

编辑
我被卡住了。我试图让你的榜样工作:

http://jsfiddle.net/yW5G7/

失败后,我把一个非常简单的测试服务,以表明该应用的工作原理的其余部分。也许有人可以在注释掉的区块中修复我的服务?

回答

0

您既可以使用AngularJs的延迟初始化,也可以创建一个返回承诺以异步解析标签信息的服务。

延迟初始化:

chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { 
    angular.bootstrap(document); 
}); 

异步服务与promise

module.service('Chrome', function($q) { 
    return function() { 
    this.getInfo = function() { 
     var deferred = $q.defer(); 
     chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { 
     deferred.resolve(tabs[0]); 
     }); 
     return deferred.promise; 
    }; 
    }; 
}); 

最好方法取决于你最初的多少化过程取决于选项卡与获取此信息对于解决扩展的特定部分很重要。