Javascript 在chrome扩展后台js中访问$http

Javascript 在chrome扩展后台js中访问$http,javascript,angularjs,google-chrome-extension,Javascript,Angularjs,Google Chrome Extension,我已经为我的chrome扩展的前端弹出窗口做好了angular的工作,但是我需要背景脚本来执行ajax请求,我甚至无法开始思考如何在那里获得angular的$http 具体来说,我将使用调用ChromeAPI“chrome.runtime.sendMessage”得到的ajax结果进行响应 因此,目前我已将我的侦听器连接到background.js中 var someData="TESTDATA"; chrome.runtime.onMessage.addListener( function

我已经为我的chrome扩展的前端弹出窗口做好了angular的工作,但是我需要背景脚本来执行ajax请求,我甚至无法开始思考如何在那里获得angular的$http

具体来说,我将使用调用ChromeAPI“chrome.runtime.sendMessage”得到的ajax结果进行响应

因此,目前我已将我的侦听器连接到background.js中

var someData="TESTDATA";
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    sendResponse(someData);
});
我想要的是

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
      $http({
    method: 'GET',
    url: "http://autocomplete.wunderground.com/' +
          'aq?query=" +
          'query'
  }).success(function(data) {
    sendResponse(data.RESULTS);
  }).error(function(err) {
    console.log(err);
  });
});
即使angular.js在后台的清单文件中,它显然也不起作用

如何在此设置中使用angular$http对象?
(我没有background.js的html页面)

要使用$http,您必须在控制器、指令或Angular的服务中。

要按您正在执行的方式执行此操作,您可以创建一个
全局变量
,然后在控制器中为您创建的变量分配
$http

var $http2;

myApp.controller('foo', ["$scope", "$http", function($scope, $http){
    $http2 = $http;
});

//Now you have access to: $http2({method:...})
或者您可以用一种更简单的方式:

var x = new XMLHttpRequest();
x.onload = function () {
    if(x.status == 200) {
        console.log(x.responseText);
        sendResponse(x.responseText);
    }
};
x.onerror = function(err) {
    console.log(err)
};
x.open('GET', 'http://autocomplete.wunderground.com/' + 'aq?query=' +  'query');
x.send()

要使用$http提供程序而不实例化任何控制器,请使用以下命令:

var $http = angular.injector(['ng']).get("$http");

即使你说angular在你的清单文件中,你能给我们看一下你的清单文件吗?为什么你需要使用angular的
$http
?为什么不仅仅是一个标准的XHR请求?@abraham简单地说就是一致性。你可能想看看Yep尝试使用angular库是一个非常糟糕的主意,我将只使用标准的AJAX虽然我已经确定了AJAX路线,但我确实回去尝试了你的建议,它工作得非常完美。