1

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

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

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

编辑
我被卡住了。我试图让你的例子起作用:

http://jsfiddle.net/yW5G7/

失败后,我添加了一个非常简单的测试服务来证明应用程序的其余部分可以正常工作。也许有人可以在注释掉的块中修复我的服务?

4

1 回答 1

0

您可以使用 AngularJs 的延迟初始化或创建一个服务,该服务返回一个异步解析选项卡信息的承诺。

延迟初始化:

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

带有承诺的异步服务:

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;
    };
  };
});

最佳方法取决于您的初始化过程在多大程度上取决于选项卡,以及获取此信息对于解决扩展的特定部分的重要性。

于 2013-04-01T00:35:18.957 回答