Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有HTTP授权的Chrome扩展中的XMLHttpRequest继续在常规页面上发送授权头_Javascript_Google Chrome_Google Chrome Extension_Xmlhttprequest - Fatal编程技术网

Javascript 具有HTTP授权的Chrome扩展中的XMLHttpRequest继续在常规页面上发送授权头

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',

我正在开发一个与Basecamp API配合使用的chrome扩展

我有一个后台页面,对API执行所有XMLHttpRequests。我使用的不是OAuth,而是带有API令牌的基本HTTP授权

在我的背景页面中,我将执行以下请求:

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查看结果。 这里有更多信息:但它是假设你知道如何处理请求而写的