Javascript 在chrome扩展后台js中访问$http
我已经为我的chrome扩展的前端弹出窗口做好了angular的工作,但是我需要背景脚本来执行ajax请求,我甚至无法开始思考如何在那里获得angular的$http 具体来说,我将使用调用ChromeAPI“chrome.runtime.sendMessage”得到的ajax结果进行响应 因此,目前我已将我的侦听器连接到background.js中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
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路线,但我确实回去尝试了你的建议,它工作得非常完美。