2014-01-13 57 views
6

我試圖從擴展中發送HTTP請求,在該擴展中我需要更改用戶代理。從Chrome擴展中更改XMLHttpRequest中的用戶代理

我的代碼如下所示:

function getXMLHttpRequest(method, url, extraHeaders) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open(method, url, true) 

    for (var headerKey in extraHeaders) { 
     xhr.setRequestHeader(headerKey, extraHeaders[headerKey]); 
    } 

    return xhr; 
} 
//.... 

getXMLHttpRequest("POST", "....", { "User-Agent": "Blahblahblah" }) 

然後,我得到一個錯誤「爲由,拒絕設定不安全標題:用戶代理」

我需要改變,因爲我的後端需要有一個特殊的User-Agent,是否可以通過擴展來實現?

我嘗試了webRequest API,在發送請求之前更改標頭,但它表示它不能與擴展中的XMLHttpRequest一起使用,以防止鎖定。

+1

@ExpertSystem但您可以使用webRequest API更改UserAgent。這是文檔中的一個例子。 http://developer.chrome.com/extensions/webRequest.html – HyLian

+0

@ExpertSystem我知道它被認爲是不安全的,但這不是一個普通的JavaScript,它是一個瀏覽器擴展,我可以使用套接字併發送任何我想要的東西。爲什麼不允許發送任意的HTTP請求?跨標準請求也被標準禁止,它們可以通過清單中的適當配置完成。 – HyLian

+0

http://www.w3.org/TR/cors/本文描述瞭如何在OPTIONS的響應中不能向不包含Access-Control-Allow-Origin的Web服務器發出HTTP請求。我沒有更改我的服務器,並且我可以將XMLHttpRequests設置爲不包含響應中的頭部的描述。但無論如何,我並不是說XMLHttpRequest應該允許它,我正在尋求一種方法來製作一個HTTP請求,在Chrome擴展中指定我自己的User-Agent。它可以是Chrome。* API或其他。 – HyLian

回答

4

您可以使用webRequest API輕鬆更改User-Agent標頭。
有關示例代碼,請參閱Associate a custom user agent to a specific Google Chrome page/tab

從該答案獲取代碼,並將"main_frame", "sub_frame"更改爲"xmlhttprequest"以修改通過XMLHttpRequest發起的網絡請求。

顯然,防止死鎖的發生,這種方法確實工作與同步請求(即當的xhr.open第三個參數被設置爲false)。

+0

嘿,羅布,是不是總是這樣?我記得在文檔中有關於應用於chrome.API的不安全XMLHttpRequest頭的限制的地方,但是我再也找不到它了。任何見解?我瘋了嗎? – gkalpak

+0

@ExpertSystem確實有一個列表,但「用戶代理」不是它的一部分。在https://developer.chrome.com/extensions/webRequest.html#life_cycle滾動一下以查看隱藏標題的部分列表。不幸的是,該列表「不能保證完整也不穩定」,因此要得到明確的答案,必須深入挖掘Chromium的源代碼。 –

+0

是的,我看到了列表,但記住一些文檔明確表示,與XHR相同的「不安全」標題也會阻止。好的,那麼我可能會失去它。順便說一句,你總是用我的Chromium的源代碼挖掘的東西嚇到我:) – gkalpak