2012-11-17 11 views
7

私は自分の頭を悩ませて、Internet Explorerのドライブからファイルをダウンロードする方法を見つけようとしています。クロスドメインセキュリティの懸念がこれを防止しているようです。GoogleドライブとCORSのクロスドメインリクエスト

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

:次のコード行に示すように、それは、ブラウザがCORS応答を要求することを可能にするリクエストヘッダを、サポートしているためにXMLHttpRequestを使用して

簡単な「GET」は、ChromeとFirefoxで正常に動作しますIEはセキュリティ上の理由から、要求ヘッダーをサポートしていません。この残念ながら人気のあるブラウザでコンテンツをダウンロードする機能がないため、私は完全に固執しています。

私の質問はこれです - この問題を扱うこれらの他のアプリケーションはどのように世界にありますか?彼らは何らかの種類のサーバー側のプロキシを使用していて、すべてのドライブ要求を独自のバックエンドで集めていますか?これは現時点ではむしろ難しいようです。または、私が気付いていない、起動時にドライブファイルにアクセスする方法はありますか?

私の知る限りでは、両方のサーバーにファイルを必要とするいくつかのソリューションがありましたが、これはオプションではありません。 GoogleドライブにはリクエストヘッダーなしでCORSで応答する機能がありますか、ドライブドメイン内のiframeから何らかのコールバックをサポートしていることに気づいていない別のAPIがありますか?

私はこの時点で水中でかなり死んでいます。どんなヒントも大歓迎です。 MSの製品に関する何か質問をしなければならないと申し訳ありません。問題はIEがAuthorizationヘッダを渡すあなたが追加することができますされていないかである場合、あなたはAuthorizationヘッダと同じ動作をしますaccess_token URLパラメータを使用してアクセストークンを渡してみてください

+0

Drive APIのJSクライアントを検討しましたか:http://googleappsdeveloper.blogspot.com/2012/09/introducing-javascript-support-for.html – monsur

+0

上記のコードはダウンロードセクションから取得しました。 Chrome、Firefox、Safariでうまく動作しますが、IEでは動作しません。私は別の方法を探しましたが、IE内のCORS認証ヘッダー、またはバイト範囲ヘッダー(部分ダウンロード用)を実行する方法がないようです。 – djabraham

+0

Hey Dano64、CORSがIE上で動作していない場合は、これを修正したいと考えています。これをIE用に修正するには、Googleの目的を達成するために必要なことを正確に教えてください。その後、私たちのengチームにバグを報告し、私は迅速な修正を得るつもりです。 – Nivco

答えて

1

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

成功!ご協力いただきありがとうございます。 これはIEで今すぐうまくいきます。IEでGoogleドライブアイテムをダウンロードするために必要な条件を要約するだけです: 1)IEのXMLHttpRequestではなくXDomainRequestを使用してください。 2)上記のように、クエリー文字列にアクセストークンを渡します。 3)XDomainRequestオブジェクトがHTTPとのコンボを許可しないため、HTTPSを使用します。 IE8、IE9、今後のIE10の問題の詳細については、以下の記事を参照してください。 http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – djabraham

関連する問題