访问chrome扩展背景js中的$ http

时间:2015-06-05 16:39:07

标签: javascript angularjs google-chrome-extension

我的Chrome扩展程序的前端弹出窗口的角度正常,但是我需要后台脚本来执行ajax请求,我甚至无法开始思考如何在那里获得有角度的$ http。

具体来说,我将通过调用chrome API" chrome.runtime.sendMessage"来响应ajax结果。

所以目前我的听众已经在后台连接了.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页面)

2 个答案:

答案 0 :(得分:1)

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

要按照您的方式进行操作,您可以创建global variable,然后在控制器中将$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()

答案 1 :(得分:1)

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

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