1

我正在研究一個可與Basecamp API配合使用的Chrome擴展。帶有HTTP授權的Chrome擴展中的XMLHttpRequest在常規頁面上繼續發送授權標題

我有一個後臺頁面做我的所有XMLHttpRequests的API。我沒有使用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請求頭授權被髮送每當我瀏覽到https://mycompany.basecamphq.com,這使某些東西在Basecamp的Web界面上不起作用。我如何使用基本的HTTP授權在我的擴展中發出請求,但是我的常規瀏覽器請求中沒有頭文件?

是的,令人困惑的問題。如果您有任何問題,我會盡力澄清。謝謝

回答

4

我相信我已經想出了一個解決方案。

通過使用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功能。

0

我只是對使用Google Apps腳本的用戶添加此操作。你可以這樣做,獲得相同的行爲有:

 


    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()); 
    } 

 

您可以運行,然後點擊視圖>日誌查看結果。 更多的信息在這裏:http://developer.37signals.com/basecamp/index.shtml但它的書面假設你知道你的方式圍繞請求。