2012-11-17 17 views
7

Internet Explorer’da Drive'dan bir dosyayı nasıl indireceğimi bulmaya çalışırken beynimi kaydırıyorum. Cross Domain güvenlik endişelerinin bunu engellediği görülüyor.Google Drive ve CORS Çapraz Etki Alanı İstekleri

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

: aşağıdaki kod satırlarını gösterildiği gibi, tarayıcı bir CORS tepkisini isteğinde bulunmasına izin isteği başlıklarını destekler çünkü XMLHttpRequest kullanılarak

Basit 'GET', Chrome ve Firefox'ta çalışıyor IE, güvenlik nedenleriyle ilgili olarak talep başlıklarını desteklemiyor. Ne yazık ki bu popüler tarayıcıda içerik indirme yeteneği olmadan tamamen sıkışmış durumdayım.

Sorum şu: Bu dünyada bu konuyla ilgili diğer uygulamalar nasıl? Bir tür sunucu tarafı proxy kullanıyorlar ve tüm sürücü isteklerini kendi arka uçlarından geçiriyorlar mı? Bu noktada oldukça zor görünüyor. Veya, başlatma sonrasında sürücü dosyasına erişmenin bir yolu var mı, farkında değil miyim?

Bildiğim kadarıyla bir seçenek olmayan, her iki sunucuda dosya gerektiren bazı çözümler gördüm. Google Drive, istek başlığı olmadan CORS ile yanıt verme yeteneğine sahip mi, yoksa Drive alan adındaki bir iframe'den bir tür geri arama özelliğini desteklediğini bilmediğim başka bir API var mı?

Bu noktada suda çok fazla öldüm. Herhangi bir ipucu çok takdir edilecektir. MS ürünleri ile ilgili herhangi bir soru sormak zorunda olduğum için üzgünüm.

+0

Drive API'sı için JS İstemcisi'ni düşündünüz mü: http://googleappsdeveloper.blogspot.com/2012/09/introducing-javascript-support-for.html – monsur

+0

Evet, yukarıda gösterilen kod İndirme bölümünden alınmıştır. Sadece IE'de değil, Chrome, Firefox ve Safari'de harika çalışıyor. Alternatif bir yöntem aradım, ancak IE içinde CORS auth başlığını veya bir bayt aralığı üstbilgisini (kısmi bir yükleme için) yapmanın bir yolu yok gibi görünüyor. – djabraham

+0

Hey Dano64, CORS IE üzerinde çalışmıyorsa, bunu düzeltmek istiyoruz. Bunu IE için düzeltmek için tam olarak Google’da ne yapmamız gerektiğini bilmeme izin verir misiniz? Daha sonra eng ekibimizle bir hata yapacağız ve hızlı bir düzeltme yapmaya çalışacağım. – Nivco

cevap

1

konu IE Eklemek izin vermeyerek ya Authorization başlık geçmediğine ile ise, Authorization başlığıyla aynı davranışa sahip access_token URL parametresini kullanarak Erişim Token geçen deneyebilirsiniz:

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

Bu öneri için teşekkürler. Bu, Chrome'da iyi çalışır. Hala IE'de bir hata atıyor, ancak bu sitenin http olarak çalışması ve downloadUrl her zaman https ile ilgili olabilir. Bu gece bir güvenlik sertifikası yükleyeceğim ve https etkin olan bir test sayfasıyla tekrar deneyeceğim. – djabraham

+0

BAŞARI! Yardımınız için teşekkürler. Bu şimdi IE'de harika çalışıyor.Sadece IE'de bir Google Drive Öğesi indirmek için gerekli koşulları özetlemek için: 1) IE'de XMLHttpRequest yerine XDomainRequest kullanın. 2) Access Token'i yukarıda gösterildiği gibi querystring'e aktarın. 3) HTTPS kullanın, çünkü XDomainRequest nesnesi HTTP ile combo'ya izin vermez. IE8, IE9 ve yaklaşan IE10 ile ilgili sorunlar hakkında daha fazla bilgi için aşağıdaki makaleye bakın. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – djabraham

İlgili konular