Javascript 具有HTTP授权的Chrome扩展中的XMLHttpRequest继续在常规页面上发送授权头
我正在开发一个与Basecamp API配合使用的chrome扩展 我有一个后台页面,对API执行所有XMLHttpRequests。我使用的不是OAuth,而是带有API令牌的基本HTTP授权 在我的背景页面中,我将执行以下请求:Javascript 具有HTTP授权的Chrome扩展中的XMLHttpRequest继续在常规页面上发送授权头,javascript,google-chrome,google-chrome-extension,xmlhttprequest,Javascript,Google Chrome,Google Chrome Extension,Xmlhttprequest,我正在开发一个与Basecamp API配合使用的chrome扩展 我有一个后台页面,对API执行所有XMLHttpRequests。我使用的不是OAuth,而是带有API令牌的基本HTTP授权 在我的背景页面中,我将执行以下请求: var xmlReq = new XMLHttpRequest(); xmlReq.onreadystatechange = function(){ doSomething(xmlReq.responseXML); }; xmlReq.open( 'GET',
var xmlReq = new XMLHttpRequest();
xmlReq.onreadystatechange = function(){ doSomething(xmlReq.responseXML); };
xmlReq.open(
'GET',
'https://mycompany.basecamphq.com/projects.xml',
true,
access_token,
'x'
);
xmlReq.send(null);
这一切都很好,但问题是在我使用扩展发出请求之后,每当我浏览到时,就会发送HTTP请求头授权,这使得某些东西在Basecamp的web界面上无法工作。如何在具有基本HTTP授权的扩展中发出请求,但在常规浏览器请求中没有标头
是的,令人困惑的问题。如果你有问题,我会尽力澄清。谢谢我想我已经找到了解决办法 通过使用xmlhttpresponse.setRequestHeader函数,如果我手动设置授权头,它不会保持持久性 因此,使用上述代码的修改版本:
xmlReq.open(
'GET',
'https://mycompany.basecamphq.com/projects.xml',
true);
xmlReq.setRequestHeader("Authorization", "Basic "+base64_encode(access_token+":x"));
xmlReq.send(null);
我使用了phpjs.org库中的base64_encode函数。我相信我已经找到了解决方案 通过使用xmlhttpresponse.setRequestHeader函数,如果我手动设置授权头,它不会保持持久性 因此,使用上述代码的修改版本:
xmlReq.open(
'GET',
'https://mycompany.basecamphq.com/projects.xml',
true);
xmlReq.setRequestHeader("Authorization", "Basic "+base64_encode(access_token+":x"));
xmlReq.send(null);
我使用了phpjs.org库中的base64_encode函数。我只是为那些使用谷歌应用程序脚本的人添加了这个函数。通过这样做,您可以获得相同的行为:
function myFunc(){
var parameters = {
method: "GET",
accept: "application/xml",
contentType: "application/xml",
headers: {"Authorization": "Basic " +Utilities.base64Encode("YOUR_BASECAMP_ACCESS_TOKEN:GARBAGE_PASSWORD")}
};
var baseURL = "https://YOUR_COMPANY_NAME.basecamphq.com/projects.xml";
var text = UrlFetchApp.fetch(baseURL, parameters);
Logger.log(text.getContentText());
}
您可以运行它,然后点击View>Logs查看结果。
这里有更多信息:但它是假设你知道如何处理请求而编写的。我只是为那些使用谷歌应用程序脚本的人补充一下。通过这样做,您可以获得相同的行为:
function myFunc(){
var parameters = {
method: "GET",
accept: "application/xml",
contentType: "application/xml",
headers: {"Authorization": "Basic " +Utilities.base64Encode("YOUR_BASECAMP_ACCESS_TOKEN:GARBAGE_PASSWORD")}
};
var baseURL = "https://YOUR_COMPANY_NAME.basecamphq.com/projects.xml";
var text = UrlFetchApp.fetch(baseURL, parameters);
Logger.log(text.getContentText());
}
您可以运行它,然后点击View>Logs查看结果。
这里有更多信息:但它是假设你知道如何处理请求而写的