我的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页面)
答案 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");