2012-10-01 124 views
1

我正在開發一個Chrome擴展,它在各個站點上生成XMLHttpRequest,但我注意到我的瀏覽器忽略字段「withCredentials」。無論這是設置爲true還是false,響應總是相同的,幷包含網頁,因爲它是通過瀏覽器進行簡單的網址導航所請求的。Chrome擴展忽略XMLHttpRequest.withCredentials字段

清單:

"background": { 
    "scripts": ["jquery.min.js", "daemon.js"], 
    "persistent": true 
}, 
"permissions": [ 
    "<all_urls>" 
] 

內daemon.js:儘管withCredentials設置爲false

var xhr = new XMLHttpRequest(); 
xhr.open("GET", 'http://stackoverflow.com/', true); 
xhr.withCredentials = false; 
xhr.onload = function(e) { 
    $('body').html(xhr.responseText); 
} 
xhr.send(); 

這將返回stackoverflow.com加載有我的一些DOM元素中的用戶名。我的問題是:

  1. 這是一個按預期行爲工作嗎?
  2. 如果是,是否有解決方法?從擴展內部發起http請求,但忽略cookie或其他會話信息? (更新:忽略所有憑證信息,如客戶端證書或http身份驗證)

我正在使用最新的(22.0.1229.79米)Chrome。

+1

這應該有所幫助:http://stackoverflow.com/questions/11327593/google-chrome-extension-prevent-cookie-on-jquery-ajax-request-or-use-a-chome-e。我不確定在Chrome擴展上下文思想中如何使用Credentials。 –

+0

經過測試的webRequest API,適用於我。我擔心這並不能解決我的問題,因爲除了頭文件/ cookies之外,還有一些用於證書傳輸的方法,比如客戶端證書。我也不想使用隱身窗口解決方案。更新:否,webRequest不能在擴展上下文中工作,所以我不能從擴展內部修改XHR的頭文件:( – James

回答

1

是的,這個(證書被髮送的動作)是打算的行爲。 XMLHttpRequest level 2 specification #withCredentials表示(這是本節的最後一行):

獲取相同來源資源時,withCredentials屬性不起作用。

顯然,在Chrome擴展的具有足夠權限(清單文件)的上下文中運行的代碼會導致該屬性的行爲相同,就像請求是由同一個來源創建的一樣。

我檢查了是否從後臺頁面獲取請求解決了任何問題,並得出結論認爲它沒有幫助。如果其他站點支持CORS(通過頭文件),那麼解決方案是不要提到清單文件的"permissions"部分的站點。 所有其他選項在this answer中突出顯示。

如果沒有一種方法令人滿意,那麼問題二的答案是「不,沒有解決方法」。

+0

不幸的是,我請求的站點都沒有支持CORS(如果他們做了,不會開發擴展),我不想使用那裏列出的任何方法(可能除了屏幕外的選項卡),所以恐怕你回答了這兩個問題。 – James