2012-03-11 13 views
18

में क्रॉस-मूल शीर्षलेख है क्योंकि jQuery AJAX CORS/IE के लिए काम नहीं कर रहा है, इसलिए मैं किसी अन्य सर्वर से डेटा पुनर्प्राप्त करने के लिए XDomainRequest का उपयोग कर रहा हूं। काम ठीक है, लेकिन मैं कुछ हेडर ('प्रमाणीकरण', 'सामग्री-प्रकार') भेजना चाहता हूं।IE8/IE9

क्या XDomainRequest में हेडर जोड़ने/बदलने का कोई मौका है?

या क्या कोई कामकाज जानता है?

उत्तर

17

यही वह है जो हमने आईई के लिए किया था।

यदि आपके पास लक्षित डोमेन पर नियंत्रण है, तो वहां एक (स्थिर) HTML फ़ाइल होस्ट करें। Iframe का उपयोग कर एचटीएमएल शामिल करें।

अब यह iframe वास्तव में स्थानीय डोमेन तक पहुंच प्राप्त करता है, ताकि आप जो चाहिए उसे प्राप्त करने के लिए आप माता-पिता और बच्चे के फ्रेम के बीच संवाद कर सकें।

यह अधिक हमारे लिए XDomainRequest से बेहतर काम करता है।

window.postMessage सेटअप संचार करने के लिए सबसे अच्छा तरीका है:

लेकिन मैं बहुत यकीन है कि केवल IE8 के बाद से काम करना शुरू कर रहा हूँ। यदि आपको पुराने ब्राउज़र की भी आवश्यकता है, तो आपको एक अलग हैक का उपयोग करना होगा।

  1. CORS, ब्राउज़र है कि यह
  2. एक iframe & window.postMessage एक प्राथमिक वापस आने
  3. सर्वर-साइड प्रॉक्सी के रूप में समर्थन के लिए:

    हमारे मामले में, यह हमारे 3-परत प्रणाली था द्वितीयक फॉलबैक

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

ध्यान रखें कि 'प्रमाणीकरण' शीर्षलेख विशेष रूप से विशेष है, और मुझे आश्चर्य नहीं होगा कि यह कुछ परिस्थितियों में अवरुद्ध है। हमने कस्टम हेडर 'एक्स-प्रमाणीकरण' जोड़ा क्योंकि यह हर समय गुजरता था।

+0

मैंने पिछले दिनों आईफ्रेम वर्कअराउंड पर एक नज़र डाली थी। लेकिन चूंकि आपको 'document.domain' सेट करना है, ऐसा लगता है कि यह केवल उसी टीएलडी के दो सबडोमेन के बीच संचार के लिए काम करता है। लेकिन दो अलग-अलग टीएलडी के बारे में क्या? (मुझे सप्ताहांत पर प्रॉक्सी-सर्वर सामान में गहराई से खोदना पड़ सकता है ...) –

+0

iframe समाधान * एपीआई के समान डोमेन पर iframe होस्ट किया गया है, तो * काम करना चाहिए। यदि प्रॉक्सी स्क्रिप्ट आपके लिए एक समाधान है, तो यह आपके उद्देश्यों के लिए * अधिक * आसान हो सकता है। ध्यान दें कि यह (आमतौर पर) प्रॉक्सी-सर्वर नहीं है, क्योंकि यह केवल एक सर्वर-साइड प्रॉक्सी स्क्रिप्ट है। – Evert

+0

ठीक है, मैंने आईफ्रेम सामान काम किया है। मैं फ्रेम ऑब्जेक्ट में सभी जानकारी (हेडर, पोस्ट-बॉडी, ...) के साथ ऑब्जेक्ट पास कर रहा हूं, जो अनुरोध करता है और प्रतिक्रिया देता है। :) प्रॉक्सी स्क्रिप्ट के बारे में: यदि मैं एपीआई-सर्वर पर स्क्रिप्ट होस्ट करता हूं, तो मुझे अभी भी हेडर्स के साथ अजाक्स में अनुरोध भेजना होगा। तो स्क्रिप्ट उसी अनुरोध पर 'अनुरोध' पृष्ठ के रूप में होगी? (=^क्लाइंट)? इस तरह आईई मुझे हेडर, बॉडी इत्यादि भेजने की अनुमति देता है। और प्रॉक्सी एपीआई सर्वर (कर्ल) को अनुरोध भेजता है?! –

2

आईई का XDomainRequest कस्टम हेडर सेट करने की अनुमति नहीं देता है। आइटम # 3 यहां देखें: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest ऑब्जेक्ट उस बिंदु पर बंद कर दिया गया है जहां प्रमाणीकृत अनुरोध करना मुश्किल है।

+1

लेकिन एक कामकाज होना चाहिए! या आईई क्या मैंने सोचा से भी बदतर है? –

+1

कस्टम हेडर या कुकीज़ सेट करने की क्षमता के बिना, मुझे प्रमाणित अनुरोध करने का एक अच्छा तरीका सुनिश्चित नहीं है। आप एथ क्रेडेंशियल्स को क्वेरी पैरामीटर के रूप में पास कर सकते हैं (मुझे विश्वास है कि ओएथ 2 उपयोगकर्ता-एजेंट प्रवाह इस अनुमति देता है), हालांकि यह सुरक्षित नहीं हो सकता है (और एसएसएल पर किया जाना चाहिए)। क्षमा करें, शायद किसी और के पास एक बेहतर जवाब है :-) – monsur

+0

मैंने सोचा कि आपको बस अन्य डोमेन साइट में लॉग इन करने की आवश्यकता है। (इस प्रकार उचित सत्र कुकीज़ और ऑथ हेडर सेट करना)। फिर आपके XDomainRequest उनके द्वारा स्थापित सत्र का उपयोग करेंगे? हालांकि हो सकता है कि मैं गलत हूं। –