2012-11-17 18 views
7

मैं अपने मस्तिष्क को इंटरनेट एक्सप्लोरर में ड्राइव से फ़ाइल डाउनलोड करने का तरीका जानने का प्रयास कर रहा हूं। ऐसा लगता है कि क्रॉस डोमेन सुरक्षा चिंताएं इसे रोक रही हैं।Google ड्राइव और सीओआरएस क्रॉस डोमेन अनुरोध

एक साधारण 'प्राप्त' XMLHttpRequest का उपयोग कर क्रोम और फ़ायरफ़ॉक्स में ठीक काम करता है, क्योंकि यह, के रूप में कोड की निम्न लाइनों में दिखाया गया अनुरोध हेडर, जो ब्राउज़र एक CORS प्रतिक्रिया का अनुरोध करने की अनुमति का समर्थन करता है:

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

आईई सुरक्षा कारणों से अनुरोधित हेडर का समर्थन नहीं करता है। इस दुर्भाग्य से लोकप्रिय ब्राउज़र में सामग्री डाउनलोड करने की कोई क्षमता नहीं है, मैं पूरी तरह से अटक गया हूं।

मेरा सवाल यह है - दुनिया में इन अन्य अनुप्रयोगों को इस मुद्दे से कैसे निपटना है? क्या वे किसी प्रकार की सर्वर साइड प्रॉक्सी का उपयोग कर रहे हैं, और अपने सभी बैक एंड के माध्यम से सभी ड्राइव अनुरोधों को फ़नल कर रहे हैं? यह इस बिंदु पर बल्कि कठिन लग रहा है। या, लॉन्च पर ड्राइव फ़ाइल तक पहुंचने का कोई तरीका है, मुझे पता नहीं है?

मैंने कुछ समाधान देखा है जिनके लिए दोनों सर्वरों पर फ़ाइलों की आवश्यकता होती है, जो कि मुझे पता नहीं है कि एक विकल्प नहीं है। क्या Google ड्राइव में अनुरोध शीर्षलेख के बिना सीओआरएस के साथ प्रतिक्रिया करने की क्षमता है, या क्या कोई अन्य एपीआई है जो मुझे पता नहीं है कि ड्राइव डोमेन के भीतर किसी आईफ्रेम से कॉलबैक के किसी प्रकार का समर्थन करता है?

मैं इस बिंदु पर पानी में काफी ज्यादा मर चुका हूं। कोई भी युक्ति सराहनीय होगी। एमएस उत्पादों के साथ करने के लिए किसी भी सवाल पूछने के लिए खेद है।

+0

क्या आपने ड्राइव एपीआई के लिए जेएस क्लाइंट माना है: http://googleappsdeveloper.blogspot.com/2012/09/introducing-javascript-support-for.html – monsur

+0

हाँ, ऊपर दिखाया गया कोड डाउनलोड अनुभाग से लिया गया था। यह क्रोम, फ़ायरफ़ॉक्स और सफारी में बहुत अच्छा काम करता है, सिर्फ आईई में नहीं। मैंने एक वैकल्पिक विधि की तलाश की, लेकिन आईई के भीतर कोरस ऑथ हेडर करने का कोई तरीका नहीं है, या बाइट रेंज हेडर (आंशिक डाउनलोड के लिए)। – djabraham

+0

हे डैनो 64, अगर सीओआर आईई पर काम नहीं कर रहे हैं तो हम इसे ठीक करना चाहते हैं। क्या आप मुझे यह बता सकते हैं कि आईई के लिए इसे ठीक करने के लिए हमें Google के अंत में क्या करना होगा? फिर मैं अपनी Eng टीम के साथ एक बग फाइल करूंगा और मैं एक त्वरित फिक्स पाने की कोशिश करूंगा। – Nivco

उत्तर

1

मुद्दा आईई आप जोड़ने की अनुमति नहीं या Authorization हैडर गुजर नहीं के साथ है, तो आप access_token URL पैरामीटर जो Authorization हेडर के रूप में एक ही व्यवहार किया है का उपयोग करते हुए पहुंच टोकन गुजर आज़मा सकते हैं:

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

इस सुझाव के लिए धन्यवाद। यह क्रोम में अच्छी तरह से काम करता है। यह अभी भी आईई में एक त्रुटि फेंक रहा है, लेकिन यह इस तथ्य से संबंधित हो सकता है कि साइट http में चल रही है और downloadUrl हमेशा https है। मैं आज रात एक सुरक्षा प्रमाणपत्र स्थापित करूंगा और https सक्षम होने वाले परीक्षण पृष्ठ के साथ पुनः प्रयास करूंगा। – djabraham

+0

सफलता! आपकी सहायता के लिए धन्यवाद। यह आईई में अब बहुत अच्छा काम करता है।IE में Google ड्राइव आइटम डाउनलोड करने के लिए आवश्यक शर्तों को सारांशित करने के लिए: 1) IE में XMLHttpRequest के विरोध में XDomainRequest का उपयोग करें। 2) ऊपर दिखाए गए अनुसार क्वेरीस्ट्रिंग में एक्सेस टोकन पास करें। 3) HTTPS का उपयोग करें, क्योंकि XDomainRequest ऑब्जेक्ट HTTP के साथ कॉम्बो की अनुमति नहीं देता है। आईई 8, आईई 9 और आगामी आईई 10 के साथ समस्याओं पर अधिक जानकारी के लिए नीचे दिया गया आलेख देखें। http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – djabraham

संबंधित मुद्दे