2012-11-17 32 views
7

我一直在試圖弄清楚如何從Internet Explorer中的驅動器下載文件,一直在絞盡腦汁。跨域安全問題似乎阻止了這一點。谷歌驅動器和CORS跨域請求

一個簡單的「GET」使用XMLHttpRequest的工作在鉻和Firefox細,因爲它支持請求頭,其允許瀏覽器請求一個CORS響應,如圖的下面幾行代碼:

var xhr = new XMLHttpRequest(); 
    xhr.open('GET', file.downloadUrl); 
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); 
    xhr.onload = function() { 
     callback(xhr.responseText); 
    }; 
    xhr.send(); 

據說出於安全考慮,IE不支持請求標頭。由於沒有能力在這個不幸流行的瀏覽器中下載內容,我完全陷入困境。

我的問題是這樣的 - 世界上的這些其他應用程序是如何處理這個問題的?他們是否使用某種服務器端代理,並通過自己的後端彙集所有驅動器請求?這一點似乎相當艱鉅。或者,有什麼方法可以在啓動時訪問驅動器文件,我不知道?

我已經看到一些解決方案需要兩臺服務器上的文件,而據我所知,這些解決方案不是一個選項。 Google Drive是否能夠在沒有請求標題的情況下使用CORS進行響應,或者是否有另一個我不知道的API支持從Drive域中的iframe進行某種回調?

在這一點上,我幾乎死在水中。任何提示將非常感謝。抱歉,不得不問任何有關MS產品的問題。

+0

您是否考慮過Drive API的JS客戶端:http://googleappsdeveloper.blogspot.com/2012/09/introducing-javascript-support-for.html – monsur

+0

是的,上面顯示的代碼來自下載部分。它適用於Chrome,Firefox和Safari,不在IE中。我尋找了一種替代方法,但似乎沒有辦法在IE或者字節範圍頭部(用於部分下載)中執行CORS auth頭文件。 – djabraham

+0

嗨Dano64,如果CORS不能在IE上工作,我們想解決這個問題。你能不能讓我知道我們需要在谷歌的最後做什麼來解決這個問題?然後我會向我們的團隊發出一個錯誤,我會盡力快速修復。 – Nivco

回答

1

如果問題是與IE瀏覽器不允許您添加或不流通Authorization頭,你可以嘗試使用它具有相同的行爲Authorization頭的access_token URL參數傳遞的訪問令牌:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', file.downloadUrl + '&access_token=' + accessToken); 
xhr.onload = function() { 
    callback(xhr.responseText); 
}; 
xhr.send(); 
+0

感謝您的建議。這在Chrome中運行良好。它仍然在IE中拋出一個錯誤,但這可能與網站運行在http中並且downloadUrl始終爲https的事實有關。我將在今晚安裝一個安全證書,並嘗試使用啓用https的測試頁。 – djabraham

+0

SUCCESS!感謝你的協助。 現在這在IE中很有用。只是總結了在IE中下載Google Drive項目的必要條件: 1)在IE中使用XDomainRequest而不是XMLHttpRequest。 2)傳遞查詢字符串中的訪問令牌,如上所示。 3)使用HTTPS,因爲XDomainRequest對象不允許與HTTP組合。 有關IE8,IE9和即將發佈的IE10問題的更多信息,請參閱下面的文章。 http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – djabraham