2010-01-14 9 views
9

मेरे पास ऐसा वातावरण है जो सर्वर साइड स्क्रिप्टिंग को वास्तव में अनुमति नहीं देता है (सर्वर पर "स्थापित" स्क्रिप्ट प्राप्त करना बेहद मुश्किल है)। मैंने जावास्क्रिप्ट की मूल उत्पत्ति का उल्लंघन करने के लिए आईफ्रेम का उपयोग करने की कोशिश की; हालांकि, यह काम नहीं किया। क्या कोई अन्य कामकाज है जिसके बारे में मुझे पता नहीं है?सर्वर साइड स्क्रिप्ट के बिना जावास्क्रिप्ट में समान मूल नीति प्राप्त करना

धन्यवाद!

+0

क्या ब्राउज़र (ओं)? आपने यह वास्तव में कैसे किया? पोस्ट कोड? – bmargulies

+1

यह सवाल शायद सबसे अक्सर पूछे जाने वाले प्रश्न है! एक खोज * कई * उत्तरों लाया होगा। आपको दोनों डोमेन पर स्क्रिप्ट और पृष्ठों पर नियंत्रण की आवश्यकता है (यदि आप दोनों डोमेन पर सामग्री संपादित करने में सक्षम नहीं हैं, तो आप इसे करने में सक्षम नहीं होंगे), और या तो http: // easyxdm जैसे ढांचे का उपयोग करने की आवश्यकता है "क्रॉस डोमेन मैसेजिंग संचार" के लिए .NET या खोजें।एचटीएमएल 5 spec में 'postMessage' विधि है, लेकिन यदि आप पूरी तरह से इस पर भरोसा करते हैं, तो यह अधिकांश ब्राउज़रों में काम नहीं करेगा, इसलिए आपको एक पुराने "हैक" विधि पर वापस गिरना होगा - क्यों न केवल एक ढांचा लेना यह आपके लिए ख्याल रखता है? – Graza

+0

[जेएसओएन-पी] (http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html) सबसे सरल समाधान है, और केवल एक (AFAIK) है कि ब्राउज़र प्लगइन्स की आवश्यकता नहीं है (जैसे फ्लैश)। इसके लिए जो कुछ भी मूल मूल साइट चलाता है उसके सहयोग की आवश्यकता होती है। – Quentin

उत्तर

28

David Dorward के रूप में उल्लेख किया गया है, JSON-P सबसे सरल और तेज़ है; हालांकि, एक और चाल है, विशेष रूप से दो iframes का उपयोग कर।

दो JSONP का उपयोग किए बिना इस समस्या को हल करें, आप निम्न कार्य कर सकते हैं। यह तकनीक मानती है कि आपके पास मूल पृष्ठ पर कुछ प्रकार की विकास पहुंच है।

दो डोमेन/साइटों पर तीन पृष्ठ हैं।

  1. जनक पेज
  2. सामग्री पेज
  3. क्रॉस-डोमेन संचार पेज (उर्फ "xdcomm")

पेज माता पिता और xdcomm पेज एक ही डोमेन पर होस्ट कर रहे हैं, सामग्री पृष्ठ है किसी अन्य डोमेन पर होस्ट किया गया। सामग्री पृष्ठ को मूल पृष्ठ में आईफ्रेम के रूप में एम्बेड किया गया है और xdcomm पृष्ठ सामग्री पृष्ठ में एक छिपे हुए आईफ्रेम के रूप में एम्बेड किया गया है।

enter image description here

xdcomm पेज एक बहुत ही सरल स्क्रिप्ट क्वेरी स्ट्रिंग में पैरामीटर प्राप्त करें पता लगाता है कि होता है, method और args चर (जहां args एक JSON इनकोडिंग स्ट्रिंग) के लिए है कि स्ट्रिंग को पार्स करता है, और उसके बाद निर्दिष्ट विधि कार्यान्वित मूल पृष्ठ में निर्दिष्ट तर्क के साथ। एक उदाहरण seen here (स्रोत देखें) हो सकता है।

भले ही जावास्क्रिप्ट की समान उत्पत्ति नीति किसी डोमेन पर दूसरे डोमेन तक पहुंचने से कोड को प्रतिबंधित करती है, इससे कोई फर्क नहीं पड़ता कि डोमेन एक-दूसरे के भीतर घोंसले हैं (डोमेन ए, डोमेन बी के भीतर घोंसला, डोमेन ए के भीतर घोंसला)।

तो, संक्षेप में, सामग्री पृष्ठ http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4] जैसे कुछ के लिए iframe के स्रोत को बदलकर xdcomm पृष्ठ के माध्यम से अभिभावक पृष्ठ पर संदेश भेजता है। यह मूल पृष्ठ में foo(1,2,3,4) निष्पादित करने के बराबर होगा।

इसके अलावा, यह भी पता है कि पहले से ही पुस्तकालय हैं जो easyxdm जैसे आपकी सहायता करते हैं। जो मैंने यहां समझाया है वह उन तकनीकों में से एक का आधार है जो वे उपयोग करते हैं, और जब यह कल्पना के रूप में नहीं हो सकता है, यह निश्चित रूप से पूरी तरह से कामकाजी और हल्के कार्यान्वयन है।

+0

दरअसल हाँ कृपया मुझे बताएं !! :) – Parris

+0

मैं वास्तव में कुछ नया लिखने जा रहा हूं। बाद में जांचें। –

+5

तो डाउनवोट क्या है? –

2

उम्मीद है कि यह एक सुरक्षा छेद होगा! :)

लेकिन यदि आपकी साइट दोनों एक ही डोमेन पर सबडोमेन हैं, तो शायद document.domain मदद कर सकते हैं।

+0

तो यदि मेरा डोमेन awesome.yahoo.com है, उदाहरण के लिए, और मैं bob.yahoo.com तक पहुंचने का प्रयास कर रहा हूं, तो मैं दस्तावेज़.डोमेन को याहू पर सेट कर सकता हूं। कॉम और फिर bob.yahoo.com तक पहुंचने में सक्षम हो? – Parris

+2

मुझे यह भी पता है कि यह एक सुरक्षा छेद है; हालांकि, मैं उम्मीद कर रहा था कि एक छेद हाहाहा था। यदि आप प्रॉक्सी का उपयोग कर इसके बारे में सोचते हैं तो वर्कअराउंड की अनुमति मिलती है। मैं समझ नहीं पा रहा हूं कि फ़ाइल का उपयोग करने के दौरान प्रॉक्सी का उपयोग क्यों किया जाता है, इसकी अनुमति नहीं है। इसके अलावा मैंने सुना है कि एचटीएमएल 5 में कुछ विशेषताएं हैं जो क्रॉस-डोमेन सामग्री की अनुमति भी देती हैं। – Parris

+0

प्रॉक्सी उपयोगकर्ता कुकीज़ या किसी अन्य प्रमाणीकरण डेटा को दूरस्थ साइट पर नहीं भेजेगा - क्योंकि यह नहीं पता कि वे क्या हैं। यह केवल वह डेटा प्राप्त कर सकता है जिस पर साइट वैसे भी हो सकती है। यह उपयोगकर्ता होने का नाटक नहीं कर सकता है। अनुमति प्रणाली विकसित करने के लिए चल रहे काम हैं ताकि XHR दूरस्थ साइटों तक पहुंच सके, ब्राउज़र समर्थन वर्तमान में कमजोर है। – Quentin

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